別のメソッドを正確に4回呼び出すメソッドがあり、そのたびに異なるパラメーターを使用します。メソッドが呼び出されるのをチェックするために、4つの異なる単体テストケースを作成して、呼び出しごとに特定の値を指定することを考えました。
これが私のメソッドの外観です。
public void MainMethod()
{
IServiceProvider serviceProvider = GetServiceProvider();
string value1 = GetValueFromStorage("SomeArg1");
// Call AnotherMethod
serviceProvider.AnotherMethod(value1);
string value2 = GetValueFromStorage("SomeArg2");
// Call AnotherMethod
serviceProvider.AnotherMethod(value2);
string value3 = GetValueFromStorage("SomeArg3");
// Call AnotherMethod
serviceProvider.AnotherMethod(value3);
string value4 = GetValueFromStorage("SomeArg4");
// Call AnotherMethod
serviceProvider.AnotherMethod(value4);
}
そして、これが私のテスト方法です:
public void TestMainMethod()
{
// Stub storage
IDataStorage dataStorage = MockRepository.GenerateStub<IDataStorage>();
// Stub serviceProvider
IServiceProvider dataStorage =
MockRepository.GenerateStub<IServiceProvider>();
// stub for SomeArg1
dataStorage.Stub(x => x.GetValueFromStorage(null)
.IgnoreArguments().Return("Value1"))
.Repeat.Once();
// stub for SomeArg2
dataStorage.Stub(x => x.GetValueFromStorage(null)
.IgnoreArguments().Return("Value2"))
.Repeat.Once();
// stub for SomeArg3
dataStorage.Stub(x => x.GetValueFromStorage(null).IgnoreArguments()
.Return("Value3")).Repeat.Once();
// stub for SomeArg4
dataStorage.Stub(x => x.GetValueFromStorage(null).IgnoreArguments()
.Return("Value4")).Repeat.Once();
// call MainMethod
MainMethod();
// Assert that third call is called with "Value3"
serviceProvider.AssertWasCalled(x => x.AnotherMethod("Value3"));
}
これは、他の呼び出しを無視して、3番目の呼び出しが特定の引数(または、さらに言えば、シーケンス内の他の呼び出し)で呼び出されていることを確認することはできないようです。「AssertWasCalled」を4回呼び出して、個々の引数を順番に確認する必要があるようです。では、どうすればこれを達成できますか?それとも私はここで何かが欠けていますか?