バックグラウンド
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++ とは異なる関数ポインターの使用規則を持っているかどうかはわかりません。または、少なくとも私がルールを覚えているもの。
編集:
__FUNCTOR オーバーロードではなく、関数ポインター オーバーロード _RETURNTYPE (*func)() を使用しようとしています。コンパイルに失敗しているコードは次のとおりです。
Assert::ExpectException<InvalidArgumentException, int>(&TestClass::TestMethod);
TestMethod は次のとおりです。
void TestMethod()
{
}