「あなたのクラスをスタブしてSUT内で何が起こるかを制御する方法」に関する複数の答えを見ました。C#スタブ。すべてのテスト対象オブジェクトのインタフェース?
インターフェースを作成し、依存性注入を使用してそのインターフェイスを注入し、その後、SUTに注入、同じインタフェースを使用してスタブを作成します。
彼らは一つのことを言います。
しかし、私は私の以前の職場で学んだ:
あなたのユニットテストの場合は、すべてクラス/機能をテストします。
それは、特定の機能レイアウトを持っているすべてのクラスのためのインターフェイスを作成する必要があることを意味していますか?
これは、クラス/ファイルの量がちょうど約2倍になることを意味します。
以下の例に見られるように、これは「行く方法」ですか、私のユニットテストプロセスで何か不足していますか?
注: 私はVS2012 Expressを使用しています。つまり、「Faker」フレームワークを意味しません。私は、標準のVS2012ユニットテストフレームワークを使用しています。
非常に簡単な例として、SUTに渡された各インターフェイスをスタブすることができます。
IFoo.cs
public interface IFoo
{
string GetName();
}
Foo.cs
public class Foo : IFoo
{
public string GetName()
{
return "logic goes here";
}
}
IBar.cs:
public interface IBar : IFoo
{
IFoo GetFoo();
}
Bar.cs:
public class Bar : IBar
{
public string GetName()
{
return "logic goes here";
}
public IFoo GetFoo()
{
return null; // some instance of IFoo
}
}
IBaz.cs:
public interface IBaz
{
IBar GetBar();
}
Baz.cs:に正しい方法で純粋主義の観点から、たぶん
public class Baz
{
public IBar GetBar()
{
return null; // some instance of IBar
}
}
私のアドバイス:これらすべてのインターフェイスを作成する必要のない良い模擬フレームワーク(Moqは良い選択です)を見つけてください。 –
私はそのフレームワークを見て行きます –
@RobertHarvey:Moqはどのようにインターフェイスの作成を避けるために行くのですか? OPはまだそれが仮想メンバーかインタフェースかのそれ(Moq)のエントリーポイントを残す必要があります。 –