2011-11-01 51 views
3

私が作業しているC++プロジェクトにGTest(Google Test)を使用し始めました。私はMFC(CFile、CObject、CStringなど)に大きく依存する1つのクラスを持っています。GTestを使用してMFCに大きく依存するメソッドをテストするには

私はMFCの依存関係を壊す(またはそれらを最小限に抑える)ので、テストを実行するためにダミーのMFCオブジェクトを作成する必要はありません。私のメソッドがMFC functionnalitiesでないものをテストしたい。ここで

は、私がテストを持っている方法のようなものの一例である:

// DumpContext class inherits from CDumpContext 
void MyClass::Print(DumpContext &dc) 
{ 

    // MyClass::Print real work goes here : 
    ... 

} 
+0

私は問題が表示されません。クラスがMFCクラスから降りた場合、その依存関係をプロジェクトから削除することはできません。 MFCのコードではなくコードをテストするように*あなたのコードに*コードを書くことです。 –

+0

MyクラスはMFCから降下しませんが、MFCクラスである参照とローカル変数を使用します。この例では、Printメソッドを呼び出す前にDumpContextを作成する必要があります。私のメソッドで使用できるCDumpContextを作成するには、CDumpContextコンストラクタにCFileを渡す必要があります。 CFileを作成するには、CreateFile関数などを呼び出すことによって作成したハンドルが必要です... MFCクラスを使用して "実際の" CDumpContextを作成する代わりに、自分のメソッドにMump DumpContextを渡すことをお勧めします。それは今より意味があるのですか?ありがとう! –

答えて

1

私の知る限り理解できるよう、MFCは、インタフェースを欠いているという事実は、模擬することが困難になります。 代わりに、依存関係から継承して、それを最大限に活用しようとすることができます。 あなたの例では、既存のCMemFileを使用することができます。このCMemFileは、構築時に何も必要なく、結果にアクセスすることができます。

他の場合には、自分自身で類似のものを発明する必要があります。

class MyClass 
{ 
public: 
    void Print(CDumpContext &dc) { 
     dc.DumpAsHex(5592); 
     return; 
    } 
}; 

TEST(Demo_Test,MyClass) 
{ 
    CMemFile File; 
    CDumpContext DumpContext_Stubb(&File); 
    MyClass Class; 
    Class.Print(DumpContext_Stubb); 
    EXPECT_GT(File.GetLength() ,0); // Do some test on the result 
} 
関連する問題