2017-12-15 8 views
1

は、以下のクラスを想像:ローカルインスタンスを使用してメソッドをテストするにはどうすればよいですか?

class ClassToBeTested{ 
    private IClassA a; 
    private IClassB b; 

    public ClassToBeTested(IclassA a, IClassB b) 
    { 
     this.a = a; 
     this.b = b; 
    } 

    public void MethodToBeTested() 
    { 
     //... 
     var c = new ClassC(a, b); 
     c.doSomeThing(); 
     //... 
    } 
} 

をそして私はMethodToBeTestedのためのいくつかのユニットテストをやってみたいです。しかし、私は依存性注入を行わずにmoq ClassCオブジェクトに方法を見つけることができません。私はメソッドシグネチャを変更し、ClassCをパラメータとして渡したくありません。

この方法をユニットテストする方法はありますか?

+0

あなたは 'ClassC'を返す仮想メソッドを作ることができます。 [Un-Testableをテストする](https://contrivedexample.com/2016/11/26/testing-the-un-testable/)を参照してください。 – Crowcoder

+0

プロパティ注入を行い、 'ClassC'のプロパティをyout' ClassToBeTested' –

+0

依存性注入を使用しますが、そうしたくない場合にVS Enterpriseにアクセスできる場合は、偽物を使用してClassCとそのメンバーを偽装することができます。これは、使用されているTypeに対してソースコントロールを持たない場合に便利です。あなたの場合は私はDIをお勧めしますが。あなたがテストしていて、密接に結合されたクラスのために簡単ではない場合、あなたはリファクタリングする必要があります(あなたのデザインがあなたのデザインを変更する必要があることを伝えています) – Igor

答えて

1

ClassToBeTestedClassCを挿入するか、実行時に作成することに依存する場合は、何らかの種類の工場で注入するといいでしょう。ClassCFactory代わりに工場を模擬することができます。

関連する問題