gpt4 book ai didi

c# - 当您的方法旨在执行许多任务时如何使用 TDD

转载 作者:行者123 更新时间:2023-11-30 23:24:50 25 4
gpt4 key购买 nike

我仍在努力遵循 TDD 之路。

假设我在文件上传到共享文件夹时触发了 SunSystemBroker。该代理旨在打开此文件,从中提取记录,尝试在另一个系统中查找关联的付款,最后调用工作流!

If I want to follow TDD to develop the IBroker.Process() method how shall i do?

注意:Broker 是继承自 IBroker 并由控制台应用程序(如插件)加载的独立程序集。

This console is in charge of triggering each broker!

public interface IFileTriggeredBroker : IBroker
{
FileSystemTrigger Trigger { get; }
void Process(string file);
}

public class SunSystemPaymentBroker : IFileTriggeredBroker
{
private readonly IDbDatasourceFactory _hrdbFactory;
private readonly IExcelDatasourceFactory _xlFactory;
private readonly IK2DatasourceFactory _k2Factory;
private ILog _log;

public void Process(string file)
{
(...)
// _xlFactory.Create(file) > Extract
// _hrdbFactory.Create() > Find
// Compare Records
// _k2Factory.Create > Start
}
}

每种方法都经过单独测试。

谢谢塞布

最佳答案

假设你说了每个方法:

_xlFactory.Create(file);
_hrdbFactory.Create();

// Compare Records
_k2Factory.Create();

是单独测试的,在Process(file)中测试的逻辑非常少。

如果您使用 Moq 之类的东西,您可以检查调用是否发生:

// Arrange
const string File = "file.xlsx";
var xlFactory = new Mock<IExcelDatasourceFactory>();
var hrbdFactory = new Mock<IDbDatasourceFactory>();
var k2Factory = new Mock<IK2DatasourceFactory>();

// Act
var sut = new SunSystemPaymentBroker(xlFactory.Object, hrdbFactory.Object, k2Factory.Object); // I'm assuming you're using constructor injection
sut.ProcessFile(File);

// Assert
xlFactory.Verify(m => m.Create(File), Times.Once);
hrbdFactory.Verify(m => m.Create(), Times.Once);
k2Factory.Verify(m => m.Create(), Times.Once);

为简洁起见,我将此作为单个测试来完成,但使用单个“断言”(verify 调用)分成 3 个测试更为现实。对于 TDD,您将编写每个测试,然后在 Process(file) 中连接该方法。

您可能还想看看有一个更大的、集成级别的测试,您可以在其中传递具体版本的 IExcelDatasourceFactoryIK2DatasourceFactoryIDbDatasourceFactory 并更深入地练习该系统。

在书中Growing Object-Oriented Software Guided by Tests ,这将被定义为一个验收测试,它将在工作开始之前编写,并且在该功能被添加到更小的 TDD 功能循环中时失败,这有助于整体功能。

关于c# - 当您的方法旨在执行许多任务时如何使用 TDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37585185/

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