Unit testing 使用流测试类
我对为公共API涉及某种流的类编写单元测试的最佳方法感兴趣,例如:Unit testing 使用流测试类,unit-testing,testing,Unit Testing,Testing,我对为公共API涉及某种流的类编写单元测试的最佳方法感兴趣,例如: public class PaginatedWriter { public void AppendLine(string line) { ... } public IEnumerable<string> GetPages() { ... } public int LinesPerPage { get; private set; } } 现在,我的问题是:即使我们正在测试GetPages()方法,在最后一个测试方法中
public class PaginatedWriter {
public void AppendLine(string line) { ... }
public IEnumerable<string> GetPages() { ... }
public int LinesPerPage { get; private set; }
}
现在,我的问题是:即使我们正在测试GetPages()方法,在最后一个测试方法中调用AppendLine()是否可以
我知道在这种情况下的一个解决方案是使AppendLine()虚拟并覆盖它,但问题是AppendLine()操纵内部状态,我认为这不应该是单元测试的业务。我认为测试通常遵循类似“设置-操作-检查-拆卸”的模式 我将大多数常见的设置和拆卸集中在各自的功能中 但对于特定于测试的设置和拆卸,它是测试方法的一部分 我认为使用对象的方法调用来准备被测试对象的状态没有错。在OOP中,我不会尝试将状态与操作分离,因为范例会竭尽全力统一它们,如果可能的话,甚至会隐藏状态。在我看来,被测试的单元是类状态和方法
我用一条空行将设置块、操作块和验证块分开,从而在代码中进行视觉区分。是的,我认为这是绝对正确的
以任何你认为可行的方式进行测试。我发现在每种测试方法中只测试一件事情有太多的教条。这是一个很好的理想,但有时它远不如单纯的替代方案那么实用。是的,如果我们严格应用“只测试一个方法”规则,我们最终会得到一堆具有过程接口的类。
public void AppendLine_EmptyLine_AddsEmptyLine() { ... }
public void AppendLine_NonemptyLine_AddsLine() { ... }
public void GetPages_ReturnsPages() {
writer.AppendLine("abc");
writer.AppendLine("def");
var output = writer.GetPages();
...
}