我想單元測試/驗證一個方法正在被測系統(SUT)上的依賴關係上調用。當SUT利用任務並行Libaray進行單元測試Mock
- 依賴性是IFoo。
- 依賴類是IBar。
- IBar以Bar的形式實現。
- 當在Bar實例上調用Start()時,Bar會在新的(System.Threading.Tasks。)任務中調用IFoo的Start()。
單元測試(MOQ):
[Test]
public void StartBar_ShouldCallStartOnAllFoo_WhenFoosExist()
{
//ARRANGE
//Create a foo, and setup expectation
var mockFoo0 = new Mock<IFoo>();
mockFoo0.Setup(foo => foo.Start());
var mockFoo1 = new Mock<IFoo>();
mockFoo1.Setup(foo => foo.Start());
//Add mockobjects to a collection
var foos = new List<IFoo>
{
mockFoo0.Object,
mockFoo1.Object
};
IBar sutBar = new Bar(foos);
//ACT
sutBar.Start(); //Should call mockFoo.Start()
//ASSERT
mockFoo0.VerifyAll();
mockFoo1.VerifyAll();
}
伊巴爾的實施,酒吧:
class Bar : IBar
{
private IEnumerable<IFoo> Foos { get; set; }
public Bar(IEnumerable<IFoo> foos)
{
Foos = foos;
}
public void Start()
{
foreach(var foo in Foos)
{
Task.Factory.StartNew(
() =>
{
foo.Start();
});
}
}
}
起訂量異常:
*Moq.MockVerificationException : The following setups were not matched:
IFoo foo => foo.Start() (StartBar_ShouldCallStartOnAllFoo_WhenFoosExist() in
FooBarTests.cs: line 19)*
是否有什麼特別的原因不要自己編寫一個簡單的'IFoo'模擬實現並使用它呢? – 2010-04-29 11:46:21