如何正确调用Assert::ExpectException?
How to call the Assert::ExpectException correctly?
我正在使用 Microsoft 的 CppUnitTestFramework 编写一些单元测试。
我想测试我调用的方法是否抛出正确的异常。我的代码是:
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));
}
在下面的 link 中,我写了类似于上一个答案的调用:
Function Pointers in C++/CX
编译时,我得到 C2064 错误:术语不计算为采用 0 个参数的函数
为什么不起作用?
您需要将被测代码包装在 lambda 表达式中,以供 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();
});
我正在使用 Microsoft 的 CppUnitTestFramework 编写一些单元测试。
我想测试我调用的方法是否抛出正确的异常。我的代码是:
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));
}
在下面的 link 中,我写了类似于上一个答案的调用:
Function Pointers in C++/CX
编译时,我得到 C2064 错误:术语不计算为采用 0 个参数的函数
为什么不起作用?
您需要将被测代码包装在 lambda 表达式中,以供 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();
});