Как правильно вызвать Assert::ExpectException?
Я пишу некоторые модульные тесты, используя CppUnitTestFramework от Microsoft.
Я хочу проверить, вызывает ли метод, который я вызываю, правильное исключение. Мой код:
TEST_METHOD(test_for_correct_exception_by_input_with_whitespaces)
{
std::string input{ "meet me at the corner" };
Assert::ExpectException<std::invalid_argument>(AutokeyCipher::encrypt(input, primer));
}
В ссылке ниже я написал звонок, похожий на последний ответ:
При компиляции я получаю ошибку C2064: термин не оценивает функцию, принимающую 0 аргументов
Почему это не работает?
2 ответа
Вам нужно обернуть тестируемый код в лямбда-выражение, которое будет вызываться Assert::ExpectException
функция.
void Foo()
{
throw std::invalid_argument("test");
}
TEST_METHOD(Foo_ThrowsException)
{
auto func = [] { Foo(); };
Assert::ExpectException<std::invalid_argument>(func);
}
Или просто
Assert::ExpectException<std::invalid_argument>([]() {
foo();
});