次のようなクラスを単体テストしたい:
template <typename T>
class MyClass {
...
void someMethod() {
T object;
object.doSomething();
}
...
};
このクラスを単体テストしたいので、T のモック クラスを作成します。
struct MockT {
...
MOCK_METHOD(doSomething, 0, void());
...
};
次に、テスト ケースで使用します。
BOOST_AUTO_TEST_CASE(testSomeMethod) {
MyClass<MockT> myClassUnderTest;
MOCK_EXPECT(???)....;
myClassUnderTest.someMethod();
}
このオブジェクトを期待するにはどうすればよいですか? 私の最初のアイデアは、作成されMockT
たすべてのインスタンスをコンストラクターから静的コンテナーに格納し、それらをコンテナーからデストラクタから削除することでした。これは、次のように、オブジェクトが使用されている場所とは異なる方法で作成された場合に機能します。
myClassUnderTest.createTheObject();
MOCK_EXPECT(MockT::findMyObject().doSomething);
myClassUnderTest.useTheObject();
しかし、これにはクラスのインターフェースを変更する必要があり、実際にはそうしたくありません。他にできることはありますか?