模拟对象和真实对象的单元测试差异
本文关键字:对象 单元测试 真实 模拟 | 更新日期: 2023-09-27 17:56:07
下面是我的单元测试方法(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)。
我的问题是当我调试测试时,我在实际对象中没有得到与我在模拟中传递的相同的产品列表。根据我的探索,我们将在实际结果中获得与模拟对象相同的对象列表。
任何人都可以告诉我这里出了什么问题吗?
编辑
我只想知道模拟对象返回与实际对象相同的值的必要性,或者可以更改?
-
初始化
_productService
时,注入您正在设置的_productDalMock
。这通常在初始化_productDalMock
实例之后,在_productService
的构造函数中完成。_productService = new ProductService(_productDalMock);
-
在调试中,验证
_productService.GetProducts
代码最终是否命中_productDal.GetProducts
代码行,即 DAL 调用之前没有代码会使_productService.GetProducts
方法返回等。
如果您确保上述 2 个步骤,则退回的实际产品应与您通过的产品相同。