を模擬:GMOCK - 私はクラスのGMOCKテストケースを書いているオブジェクトとその内部モック方法
class A{ .. void Text() .. };
次にクラスAのメンバーの方法の一つは、それに埋め込まれたクラスB型のオブジェクトを有し、
void A::Text()
{
B bobj;
B::SMethod();
bobj->BMethod();
......
}
このような場合、私はBとその方法を模擬することができますか?
を模擬:GMOCK - 私はクラスのGMOCKテストケースを書いているオブジェクトとその内部モック方法
class A{ .. void Text() .. };
次にクラスAのメンバーの方法の一つは、それに埋め込まれたクラスB型のオブジェクトを有し、
void A::Text()
{
B bobj;
B::SMethod();
bobj->BMethod();
......
}
このような場合、私はBとその方法を模擬することができますか?
A
をテストする代わりに、それから派生したクラスをテストできます。TestableA
としましょう。 A
でText()
virtual
を作成し、オーバーライドでB
のモックを使用してください。また、静的メソッドでクラスをモックする方法の詳細については、this questionをご覧ください。
それにもかかわらず、最善の解決策は、インターフェース(例えばInterfaceB
)を導入し、Text()
にそれを注入することによってA
とB
間の既存の緊密な依存性を破壊することであろう。 SMethod()
は、インターフェイスの(非静的な)メンバーになります。プロダクションでは、ActualB
をActualB::SMethod()
とし、static
B::SMethod()
とします。テストでは、テストのニーズに合わせてMockB::SMethod()
を使用します。