1

背景

我正在使用 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()
{
}
4

1 回答 1

0

ExpectException模板中的第二种类型(_RETURNTYPE在声明中),需要匹配传入它的函数的返回类型。您已使用int但您的函数返回void,因此这会产生编译器错误。如果你想在这里明确,第二种类型应该是void. 但是,由于编译器可以从函数参数中找出类型,因此您无需指定它。尝试这个:

Assert::ExpectException<InvalidArgumentException>(TestClass::TestMethod);
于 2013-10-17T20:41:11.213 回答