如何对创建新进程的代码进行单元测试?

时间:2009-06-02 07:02:30

标签: c# unit-testing tdd

如何测试以下方法?

这是一个接口的具体类实现的方法。

我已经用Process类包装了一个只暴露我需要的方法和属性的接口。 ProcessWrapper类是此接口的具体实现。

    public void Initiate(IEnumerable<Cow> cows)
    {
        foreach (Cow c in cows)
        {
            c.Process = new ProcessWrapper(c);
            c.Process.Start();
            count++;
        }
    }

3 个答案:

答案 0 :(得分:3)

有两种方法可以解决这个问题。第一种是使用依赖注入。您可以注入一个工厂并让Initiate调用create方法来获得测试所需的ProcessWrapper。

另一种解决方案是使用TypeMock等模拟框架,让您解决这个问题。 TypeMock基本上允许您模拟任何东西,因此您可以使用它来提供模拟对象而不是实际的ProcessWrapper实例。

答案 1 :(得分:0)

您的流程有何功能?有什么方法可以检查它是否正在做它应该做的事情?例如,它可能写入文件或数据库表。或者它可能会暴露您可以尝试使用测试数据调用的API(IPC,Web服务等)。

从TDD的角度来看,插入“模拟/测试过程”可能会有意义,该过程执行一些您可以轻松检查的操作。 (这可能需要更改代码以允许您的测试代码注入一些内容。)这样,您只测试调用代码,而不一定测试实际的业务流程。然后,您可以使用不同的单元测试来测试业务流程。

答案 2 :(得分:0)

我不熟悉C#(我更喜欢没有哈希),但你需要某种程序的接口(IPC或任何最方便的方法),所以你可以发送测试请求并获得结果。在最简单的级别,您只需向进程发送一条消息并接收结果。或者您可以拥有更多粒度并从测试工具中发送更具体的命令。这取决于您如何设置单元测试环境,更准确地说是如何发送测试命令,如何接收它们以及如何报告结果。

我个人会在流程中有一个测试对象,只需接收,运行和报告单元测试结果并在该对象中包含测试代码。