如何测试以下方法?
这是一个接口的具体类实现的方法。
我已经用Process
类包装了一个只暴露我需要的方法和属性的接口。 ProcessWrapper
类是此接口的具体实现。
public void Initiate(IEnumerable<Cow> cows)
{
foreach (Cow c in cows)
{
c.Process = new ProcessWrapper(c);
c.Process.Start();
count++;
}
}
答案 0 :(得分:3)
有两种方法可以解决这个问题。第一种是使用依赖注入。您可以注入一个工厂并让Initiate调用create方法来获得测试所需的ProcessWrapper。
另一种解决方案是使用TypeMock等模拟框架,让您解决这个问题。 TypeMock基本上允许您模拟任何东西,因此您可以使用它来提供模拟对象而不是实际的ProcessWrapper实例。
答案 1 :(得分:0)
您的流程有何功能?有什么方法可以检查它是否正在做它应该做的事情?例如,它可能写入文件或数据库表。或者它可能会暴露您可以尝试使用测试数据调用的API(IPC,Web服务等)。
从TDD的角度来看,插入“模拟/测试过程”可能会有意义,该过程执行一些您可以轻松检查的操作。 (这可能需要更改代码以允许您的测试代码注入一些内容。)这样,您只测试调用代码,而不一定测试实际的业务流程。然后,您可以使用不同的单元测试来测试业务流程。
答案 2 :(得分:0)
我不熟悉C#(我更喜欢没有哈希),但你需要某种程序的接口(IPC或任何最方便的方法),所以你可以发送测试请求并获得结果。在最简单的级别,您只需向进程发送一条消息并接收结果。或者您可以拥有更多粒度并从测试工具中发送更具体的命令。这取决于您如何设置单元测试环境,更准确地说是如何发送测试命令,如何接收它们以及如何报告结果。
我个人会在流程中有一个测试对象,只需接收,运行和报告单元测试结果并在该对象中包含测试代码。