Tôi đang cố gắng kiểm tra đơn vị/xác minh rằng phương thức đang được gọi dựa trên sự phụ thuộc, bởi hệ thống đang được kiểm tra (SUT).Thử nghiệm đơn vị với Mocks khi SUT đang tận dụng Task Parallel Libaray
- Mức độ trầm trọng là IFoo.
- Lớp phụ thuộc là IBar.
- IBar được triển khai dưới dạng Bar.
- Thanh sẽ gọi lệnh Start() trên IFoo trong một nhiệm vụ mới (System.Threading.Tasks.), Khi Start() được gọi trên cá thể Bar.
Unit Test (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();
}
Thực hiện Ibar như Bar:
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 Ngoại lệ:
*Moq.MockVerificationException : The following setups were not matched:
IFoo foo => foo.Start() (StartBar_ShouldCallStartOnAllFoo_WhenFoosExist() in
FooBarTests.cs: line 19)*
Có lý do cụ thể nào không để viết một bản thực thi giả lập đơn giản về chính bản thân bạn và sử dụng thay thế đó không? –