Moqをお勧めします。
あなたは次のように定義されたクラスMyClass
を持って言う:
public class MyClass{
private IMyDependency dependency;
public MyClass(IMyDependency dependency){
this.dependency = dependency;
}
public void DoSomething(){
//invoke a method on the dependency
this.dependency.DoWork();
}
}
IMyDependency
はこのように宣言されています。今すぐ部品番号を使用して
public interface IMyDependency{
void DoWork();
}
、あなたは依存関係がそうのように呼ばれていることをテストできます。
public void DoSomethingWillInvokeDoWorkCorrectly()
{
var mock = new Mock<IMyDependency>();
mock.Setup(imd => imd.DoWork()).Verifiable();
var sut = new MyClass(mock.Object);
sut.DoSomething();
//Verify that the mock was called correctly
mock.Verify();
}
これは非常に簡単な例だったので、それを少しスパイス。
パブリッククラスMyClass2 {
private IMyDependency2 dependency;
public MyClass2(IMyDependency2 dependency){
this.dependency = dependency;
}
public void DoSomething(int i){
//invoke a method on the dependency
this.dependency.DoWork(i * 2);
}
}
IMyDependency2
は、このように宣言されています
public interface IMyDependency2{
void DoWork(int i);
}
正しいパラメータが依存関係に渡されることを試験する試験方法は、次のようになります。
public void DoSomethingV2WillInvokeDoWorkCorrectly()
{
var mock = new Mock<IMyDependency2>();
int parameter = 60;
mock.Setup(imd => imd.DoWork(It.Is<int>(i => i == 2 * parameter)).Verifiable();
var sut = new MyClass2(mock.Object);
sut.DoSomething(parameter);
//Verify that the mock was called correctly
mock.Verify();
}
ご覧のとおり、Setup
メソッドは、に渡されたパラメータに制約を追加し、その値がparameter
変数の値の2倍でなければならないintであることを示します。
+1ハックリンクのために+1 – Michel
@Michel Oran(Rhino Mocksの著者)とKzu(Moqの著者)がしばらく前後に行き来するので、この記事のコメントもチェックしてください。あなたが私に尋ねるならば、それは鉄を磨く鉄です。あなたの答えに感謝します。 –