如何对返回 void 的方法进行单元测试

本文关键字:方法 单元测试 void 返回 | 更新日期: 2023-09-27 17:55:26

我正在做单元测试(C#),我有一些返回void的方法。我想知道模拟这些方法的最佳方法是什么?

下面是一段代码:-

 public void DeleteProduct(int pId)
 {
         _productDal.DeleteProduct(pId);
 }

如何对返回 void 的方法进行单元测试

你可以测试的是,ProductDAL.DeleteProduct 是使用正确的参数调用的。这可以通过使用依赖注入和模拟来实现!

使用最小起订量作为模拟框架的示例:

public interface IProductDal
{
    void DeleteProduct(int id);
}
public class MyService
{
    private IProductDal _productDal;
    public MyService(IProductDal productDal)
    {
        if (productDal == null) { throw new ArgumentNullException("productDal"); }
        _productDal = productDal;
    }
    public void DeleteProduct(int id)
    {
        _productDal.DeleteProduct(id);
    }
}

单元测试

[TestMethod]
public void DeleteProduct_ValidProductId_DeletedProductInDAL()
{
    var productId = 35;
    //arrange
    var mockProductDal = new Mock<IProductDal>();
    var sut = new MyService(mockProductDal.Object);
    //act
    sut.DeleteProduct(productId);
    //assert
    //verify that product dal was called with the correct parameter
    mockProductDal.Verify(i => i.DeleteProduct(productId));
}

假设你可以模拟字段_productDal,你必须测试具有相应pId的记录/对象是否真的被删除了。

如果你在类中注入_productDal,例如使用构造函数注入,可以实现对的模拟。