私は、何も制御していない外部クラスのサブクラスであるクラスを持っています。外部クラスはシステムリソースに依存します。たとえば、外部システムに依存する外部基底クラスから派生したクラスをテストする方法
class MyClass : public ExternalBase // This class is from external framework and framework requires it to derive from this class.
{
int doSomePrivateThing(int);
public:
virtual int DoSomething(int);
virtual ~MyClass();
}
int MyClass::doSomePrivateThing(int)
{
// do some private task
}
int MyClass::DoSomething(int n)
{
// Do MyClass Specific task
int k = doSomePrivateThing(n);
return ExternalBase::DoSomething(k); // This function depends on external system resources.
// Probably try to communicate with remote server
// or attempt access Storage or Display device etc.
}
MyClass::~MyClass()
{}
MyClassの依存関係を解除し、単体テストをMyClass :: DoSomething()に書き込む方法を教えてください。継承の代わりにコンポジションを使用することは、フレームワークがこの基本クラスからクラスを派生させる必要があるため、選択肢ではありません。
私はC++とGoogleTest/Mockを使用しています。しかし、どのような一般化された解決策が評価されます。
ありがとうございます。
あなたはユニットテスト、これをすることはできません。物語の終わり。 – SergeyA
@SergeyA私はそのようにあきらめることはできません。依存関係を解消するためにマクロやテンプレートトリックを行うことはできませんか?アイデアはありますが、それが良いかどうかはわかりません。私はそれを答えとして掲示します。しかし、誰か他の人が良いアイデアを持っているなら、私は他人を待っています。 – army007
私の経験はCppUTestであるため、用語がオフになっている可能性があります。しかし、予想される最高のことは、MyClass :: DoSomething関数が期待通りに外部呼び出しまで機能していることを確認することです。その時点で、期待通りのものを渡すことをテストできます。 CppUTestでは、これは嘲笑によって達成され、私はGoogleTestに相当するものがわからない。 – Aumnayan