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
をパラメータとして渡したくありません。
この方法をユニットテストする方法はありますか?
あなたは 'ClassC'を返す仮想メソッドを作ることができます。 [Un-Testableをテストする](https://contrivedexample.com/2016/11/26/testing-the-un-testable/)を参照してください。 – Crowcoder
プロパティ注入を行い、 'ClassC'のプロパティをyout' ClassToBeTested' –
依存性注入を使用しますが、そうしたくない場合にVS Enterpriseにアクセスできる場合は、偽物を使用してClassCとそのメンバーを偽装することができます。これは、使用されているTypeに対してソースコントロールを持たない場合に便利です。あなたの場合は私はDIをお勧めしますが。あなたがテストしていて、密接に結合されたクラスのために簡単ではない場合、あなたはリファクタリングする必要があります(あなたのデザインがあなたのデザインを変更する必要があることを伝えています) – Igor