我正在为我的控制器和服务层(C#,MVC)进行单元测试,使用Moq dll来模拟单元测试中的真实/依赖对象。
但是我对于如何模拟依赖或真实对象有一些困惑。让我们以下面的单元测试方法为例:
[TestMethod]
public void ShouldReturnDtosWhenCustomersFound_GetCustomers ()
{
// Arrrange
var name = "ricky";
var description = "this is the test";
// setup mocked dal to return list of customers
// when name and description passed to GetCustomers method
_customerDalMock.Setup(d => d.GetCustomers(name, description)).Returns(_customerList);
// Act
List<CustomerDto> actual = _CustomerService.GetCustomers(name, description);
// Assert
Assert.IsNotNull(actual);
Assert.IsTrue(actual.Any());
// verify all setups of mocked dal were called by service
_customerDalMock.VerifyAll();
}
在上面的单元测试方法中,我模拟了GetCustomers方法并返回一个客户列表。该列表已经定义好了,看起来像下面这样:
List<Customer> _customerList = new List<Customer>
{
new Customer { CustomerID = 1, Name="Mariya",Description="description"},
new Customer { CustomerID = 2, Name="Soniya",Description="des"},
new Customer { CustomerID = 3, Name="Bill",Description="my desc"},
new Customer { CustomerID = 4, Name="jay",Description="test"},
};
让我们来看一下客户模拟对象和实际对象的断言:
Assert.AreEqual(_customer.CustomerID, actual.CustomerID);
Assert.AreEqual(_customer.Name, actual.Name);
Assert.AreEqual(_customer.Description, actual.Description);
然而,我并不理解这个(上面的单元测试)总是能够正常工作。这意味着我们只是在测试(在断言中)我们传递或返回的内容(在模拟对象中)。而我们知道真正/实际的对象将始终返回我们传递的列表或对象。
那么在这里进行单元测试或模拟的意义是什么?