以下是我的单元测试方法(c#): -
[TestMethod]
public void ShouldReturnDtosWhenProductsFound_GetProducts()
{
// Arrrange
var count = 0;
var name = "myproduct";
var description = "desc";
// setup mocked dal to return list of products
// when name and description passed to GetProducts method
_productDalMock.Setup(d => d.GetProducts(name, description)).Returns(_productList);
// Act
List<ProductDto> actual = _productService.GetProducts(name, description);
// Assert
Assert.IsNotNull(actual);
Assert.IsTrue(actual.Any());
Assert.AreEqual(_productList.Count, actual.Count);
foreach (var product in _productList)
{
Adapter.AssertAreEqual(product, actual[count]);
count++;
}
// verify all setups of mocked dal were called by service
_productDalMock.VerifyAll();
}
我使用Mock对象来模拟GetProducts
方法(依赖)。在模拟中我返回已经声明的产品列表(_productList)。
我的问题是当我调试测试时,我没有在实际对象中获得与我通过模拟相同的产品列表。根据我的探索,我们将得到实际结果中的相同的对象列表,我们传入模拟对象。
任何人都可以告诉我这里出了什么问题吗?
我只想知道模拟对象必须使用实际对象返回相同的值,还是可以更改?
答案 0 :(得分:1)
初始化_productService
时,请注入_productDalMock
您的设置。在初始化_productService
实例后,通常在_productDalMock
的构造函数中完成此操作。
_productService = new ProductService(_productDalMock);
在调试过程中,请验证_productService.GetProducts
代码是否最终到达_productDal.GetProducts
代码行。即在DAL调用之前没有代码会使_productService.GetProducts
方法返回等。
如果您确保执行上述两个步骤,则返回的实际产品应与您通过的产品相同。