Factoryメソッドを使用できます(これはfactoryパターンとは異なります)。
あなたの場合、コード例は次のとおりです。
class B
{
B_fun();
};
class A
{
A()
{
b = CreateB();
}
A_fun()
{
if( b->B_fun() === XXX )
{
doXXXXX...
}
}
private:
virtual B* CreateB()
{
return new B();
}
B* b;
}
したがって、ここに仮想の CreateB メソッドがあります。
次に、MockA クラスを作成し、このメソッド (CreateB) のみをモックします。
モック メソッドは MockB クラス インスタンスを返す必要があります。これは、MockB インスタンスを返すようにテスト フィクスチャでモック メソッド (CreateB) を設定することで実行できます。
必要に応じて、MockB インスタンスに期待を寄せます。
実際には:
class MockA : public A
{
public:
virtual ~MockA() {}
MOCK_METHOD1(CreateB, B*());
};
TEST_F(TestA, TestSomething)
{
MockB* b(new MockB()); // mock that will be used
MockA a; // class under test, factory method(s) mocked
// setup mocks
EXPECT_CALL( a, CreateB()).Times(Exactly(1)).WillOnce(Return(b));
EXPECT_CALL(*b, SomeMethod()).Times(Exactly(1));
// execute test
a.A_fun(3u);
}