gpt4 book ai didi

TDD、Mocking、依赖注入(inject)和 DRY 原则

转载 作者:行者123 更新时间:2023-12-02 09:00:28 25 4
gpt4 key购买 nike

我有一个 Controller 类,它接受在运行时注入(inject)的构造函数中的多个参数。

示例:

    public ProductController(IProductRepositort productRepository, 
IShippingService shippingService, IEmailProvider emailProvider)
{
...
}

我发现测试方法变得越来越庞大。我设置的方法如下:

[Test]
public void CanSendProduct()
{
//Code to set up stub
List<Product> products = new List<Product>();
for (int i = 0; i < length; i++)
{
products.Add(new Product()));
}

var mockProductRepository = new Mock<IProductRepository>();
mockProductRepository.Setup(x => x.GetProducts()).Returns(products);

//Code to set up stub
....
....
var mockShippingService = new Mock<IShippingService>();
mockShippingService.Setup(x => x.GetShippers()).Returns(shippers);

//Code to set up stub
.....
.....
var mockEmailProvider = new Mock<IEmailProvider>();
mockEmailProvider.Setup(x => x.Send()).Returns(provider);

//Execute Test
....
....

//Assert
....
....
}

显然,在这个测试类的每个方法中重复模拟设置是不切实际的。

如何创建丰富的模拟对象,使我能够对测试进行行为验证,同时最大限度地减少设置痛苦?

处理这个问题的 TDD 最佳实践是什么?

谢谢

最佳答案

如果您的测试框架支持在每次测试之前和之后调用的设置/拆卸函数,请在这些函数中创建和销毁一些“默认”模拟对象。您的测试可以简单地使用这些对象,对于默认模拟对象不适合您的特殊情况,您可以简单地忽略它们并在这些测试中创建本地模拟对象。

关于TDD、Mocking、依赖注入(inject)和 DRY 原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1637821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com