Как правильно вызвать 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));              
}

В ссылке ниже я написал звонок, похожий на последний ответ:

Указатели на функции в C++/CX

При компиляции я получаю ошибку 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();
    });
Другие вопросы по тегам