Я использую функции тестирования модулей в Visual Studio 2013 для моего приложения.Как утверждать, что исключение не было поднято?
Я пытаюсь написать тест для класса, в котором вы передаете конкретный объект конструктору, и в зависимости от состояния переданного объекта может быть выбрано исключение.
Я написал заглушки для каждого состояния объекта, и написал тестовые случаи для сценариев, где конструктор будет сгенерированы исключением следующим образом:
TEST_METHOD(constructor_ExceptionRaised)
{
// arrange
const InvalidStub stub;
// act
auto act = [stub] { const Foo foo(stub); };
// assert
Microsoft::VisualStudio::CppUnitTestFramework::Assert::ExpectException
<MyException>(act);
}
Как я должен подходить сценарий, в котором я хочу передать действительный заглушка и просто утверждать, что исключение не было поднято? Я хочу, чтобы меня беспокоили только то, что не было брошено (а не какое-либо исключение) конкретное MyException
.
Я взломал вместе метод испытания следующим образом, но не уверен, если есть просто «1 линия» подход, который будет соответствовать моим потребностям:
TEST_METHOD(constructor_NoException)
{
// arrange
const ValidStub stub;
try
{
// act
const Foo foo(stub);
}
// assert
catch (MyException e)
{
Microsoft::VisualStudio::CppUnitTestFramework::Assert::Fail();
}
catch (...)
{
Microsoft::VisualStudio::CppUnitTestFramework::Assert::Fail();
}
}
Я не уверен, что я должен также не «любой исключение ", так как это должно (?) подбираться тестовым проводником (т. е. сбой теста). По той же причине, что следующий быть по существу такой же тест:
TEST_METHOD(constructor_NoException)
{
// arrange
const ValidStub stub;
// act
const Foo foo(stub);
// assert
// no exception
}
Из двух блоков 'catch', один из них является излишним (поскольку они делают то же самое). Во всяком случае, одна из возможных альтернатив - вернуть индикатор того, что произошло, из функции 'act'. Использование соответствующих средств проверки проверки возвращаемого значения. –
Я ничего не знаю о инфраструктуре модульного тестирования Visual Studio, но большинство модулей модульного тестирования не пройдут проверку, если исключение распространяется вне метода тестирования. – immibis
@ Cheersandhth.-Alf - Если функция возвращает void, правильно ли утверждать, что указатель функции является указателем на пустоту? – camelCase