私はこれを持っています(実際にはそうではありませんが、単なる例です):
template<class T>
T foo() {...}
関数の結果の型を確認する必要があります (ここでは意味がありません。私の例はもっと複雑です)、Google のテスト/モックはこの種のアサーションをサポートしていますか?
A< T > で EXPECT_THAT を試してみましたが、うまくいきません。
ありがとう。
私はこれを持っています(実際にはそうではありませんが、単なる例です):
template<class T>
T foo() {...}
関数の結果の型を確認する必要があります (ここでは意味がありません。私の例はもっと複雑です)、Google のテスト/モックはこの種のアサーションをサポートしていますか?
A< T > で EXPECT_THAT を試してみましたが、うまくいきません。
ありがとう。
Google Test はランタイム テスト用です。関数の型は、コンパイル時に、Google Test が全体像に入る前に決定されます。
result_of
次のように、typeid 値が同じであることを使用してアサートできます。
EXPECT_EQ(typeid(int), typeid(std::result_of<foo<int>() >::type));
もう 1 つのオプションは、戻り値の型の明示的なテストを控えて、使用されると予想されるとおりに関数を使用することです。戻り値の型に問題がある場合は、テストを実行する前にコンパイラが通知します。とにかく、特定の戻り値の型を 1 つ要求するよりは、おそらくそのほうがよいでしょう。long
たとえば、戻り値の型が期待された ではなく であることが判明した場合int
でも、他のすべてのテストに合格した場合int
、そもそも本当に重要でしたか?
::testing::StaticAssertTypeEq();を使用できます。std::result_ofで。型付きテストも使用できます。完全な例:
#include <type_traits>
template<class T>
T foo(int) {...}
///Boilerplate code for using several types
template <typename T>
class ResultTest : public testing::Test {}
typedef ::testing::Types<float, double, int, char*, float**> MyTypes; //Types tested!
TYPED_TEST_CASE(ResultTest , MyTypes);
///Real test
TYPED_TEST(ResultTest , ResultTypeComprobation) {
//It will be checked at compile-time.
::testing::StaticAssertTypeEq<TypeParam, std::result_of(foo<TypeParam>)>();
}
ただし、テストはインスタンス化され、何もせずに実行時に実行されます。奇妙ですが、これ以上のものは見つかりませんでした。