1
背景函數指針
我使用的是Windows應用商店的單元測試項目++編寫在Windows Store應用中的溫度。在試圖找出如何測試異常時,我在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);
這裏是TestMethod的:
void TestMethod()
{
}
...你想通過什麼作爲_FUNCTOR? –
是的,這可能會有所幫助,不是嗎? – basilard99
我想你可能會更好地嘗試_FUNCTOR版本。在我看來,第一個重載將會匹配全局函數,而不是您嘗試使用的成員函數......或者只是嘗試使用全局函數來測試)。 – Luis