我感兴趣的是写一个类,它的公共API单元测试的最好途径,就是某种流动的,例如:测试用流动的类
public class PaginatedWriter {
public void AppendLine(string line) { ... }
public IEnumerable<string> GetPages() { ... }
public int LinesPerPage { get; private set; }
}
该类对文本进行分页线到给定每页的行数。为了测试这个类,我们可能会碰到这样的:
public void AppendLine_EmptyLine_AddsEmptyLine() { ... }
public void AppendLine_NonemptyLine_AddsLine() { ... }
public void GetPages_ReturnsPages() {
writer.AppendLine("abc");
writer.AppendLine("def");
var output = writer.GetPages();
...
}
现在,我的问题是:它确定以使最后的测试方法AppendLine()的调用,即使我们正在测试的GETPAGES( ) 方法?
我知道在这种情况下一个解决方案是使AppendLine()虚拟并覆盖它,但问题是AppendLine()操纵内部状态,我认为这不应该是单元测试的业务。
是的,看来如果我们严格应用“仅测试一种方法”规则,我们最终会得到一堆具有过程接口的类。 – Mohammad 2010-09-01 18:41:12