背景
我正在使用 Windows 应用商店单元测试项目用 C++ 编写一个 Windows 应用商店应用程序。在试图弄清楚如何测试是否引发了异常时,我在 CppUnitTestAssert.h 中发现了 Assert::ExpectedException。其签名如下:
template<typename _EXPECTEDEXCEPTION, typename _RETURNTYPE> static void ExpectException(_RETURNTYPE (*func)(), const wchar_t* message = NULL, const __LineInfo* pLineInfo = NULL)
{
...
}
和
template<typename _EXPECTEDEXCEPTION, typename _FUNCTOR> static void ExpectException(_FUNCTOR functor, const wchar_t* message = NULL, const __LineInfo* pLineInfo = NULL)`
{
...
}
问题是:
自从我用 C++ 编码以来已经很久了,所以我很难弄清楚如何正确调用该方法。我不断收到以下错误:
'Microsoft::VisualStudio::CppUnitTestFramework::Assert::ExpectException' : none of the 2 overloads could convert all the argument types
我意识到这实际上可能是对“纯”C++ 的误解,但我不确定 C++/CX 是否有与 C++ 不同的函数指针使用规则。或者至少是我记得的规则。
编辑:
我正在尝试使用函数指针重载 _RETURNTYPE (*func)(),而不是 __FUNCTOR 重载。这是无法编译的代码。
Assert::ExpectException<InvalidArgumentException, int>(&TestClass::TestMethod);
这是测试方法:
void TestMethod()
{
}