Как перехватить исключение при сбое Assert в Nunit или MsTest - PullRequest
0 голосов
/ 20 мая 2019

Как перехватить сообщение об исключении Failed Assert или состояние при использовании метода NUnit ir MeTest Assert.

Я пытался перехватить «AssertionException» при сбое моего утверждения, как я могу перехватить это, используя NUnit или MsTest,так как метод Assert не возвращает никакого типа.Мои требования: тестирование должно продолжаться, даже когда assert get не может завершить оставшиеся утверждения, должен зафиксировать ошибку и должен провалить это утверждение.Я использовал ниже заявление кода.Когда я использую платформу Nunit, она терпит неудачу и продолжает к следующему утверждению купить не может захватить, даже когда я использую try .. catch блок, где, как и в MsTest, его сбой, захват с использованием блока try..catch и не продолжение следующего утверждения.Благодарим за любую помощь!

    public static void ResponseValueAssert(dynamic actualValue, dynamic expectedValue, string nameOfAssert)
    {
        //var ex = Assert.Throws<AssertionException>(() =>
        //Assert.AreEqual(expectedValue, actualValue, "Actual value doesn't match with Expected value {0}", nameOfAssert));

        if (ResponseValueAssertImplicit(actualValue, expectedValue, nameOfAssert))
        {
            Console.WriteLine("\r\nResponse Assert:- {0}: <PASS>", nameOfAssert);
        }
        else
        {
            Console.WriteLine("\r\nResponse Assert:- {0}: <<FAIL>>", nameOfAssert);

            Console.Error.WriteLine("\r\nResponse Assert:- {0}: <<FAIL>>", nameOfAssert);

            // Assert.Fail();
        }

        Console.WriteLine("Expected Value: {0}.\r\nActual Value: {1}.", actualValue, expectedValue);
    }

    public static bool ResponseValueAssertImplicit(dynamic actualValue, dynamic expectedValue, string nameOfAssert)
    {
        try
        {
            Assert.AreEqual(expectedValue, actualValue, "Actual value doesn't match with Expected value {0}", nameOfAssert);
            return true;
        }
        catch (AssertionException ex)
        {
            return false; 
        }
    }

1 Ответ

1 голос
/ 21 мая 2019

Бесполезно задавать вопрос о двух совершенно разных частях программного обеспечения как об одном. Ответ, очевидно, будет разным для NUnit и MSTest, которые в наши дни реализованы совершенно по-разному.

Так что я отвечу только в отношении NUnit, поскольку я понятия не имею, что вы будете делать с MSTest в любом случае.

В NUnit, если вы хотите, чтобы тест продолжался, чтобы в одном тесте можно было сообщать о более чем одном утверждении, вы используете несколько утверждений. То есть ...

Assert.Multiple(() =>
{
    // Put your various asserts here
};

NUnit сообщит обо всех невыполненных утверждениях. В конце блока проверка будет прекращена, если какое-либо из утверждений не выполнено.

Обратите внимание, что многие люди скажут, что более одного утверждения в тесте - плохая идея. Я считаю, что это происходит в большинстве случаев, но есть ситуации, такие как проверка нескольких свойств одного и того же объекта, где это может быть полезно.

Также, для записи, вы никогда не должны отлавливать исключения, которые используются внутри тестовой среды. В основном это скрытые детали реализации, и вся ваша работа может быть потеряна в следующей версии программного обеспечения ... как это уже произошло с некоторыми людьми в этом случае.

...