我正在处理一个应该操作文件的类。
它的接口有一个Open(string filename)方法,以及检索和操作内容的各种其他方法。
在调用我要测试的方法之前调用open方法可以吗?
一方面,这记录了在任何其他方法之前都应该调用open方法的事实。
另一方面,我担心这些测试的有效性,因为如果Open方法停止工作,所有测试都会失败,而不会真正报告他们应该测试的方法的失败。
我考虑过的事情:
在测试时使用反射将对象置于已知的“可行”状态,而无需调用开放方法(复杂且难以维护)
使用静态构造方法创建对象,然后打开它,返回工作对象(但也应该有一个选项,使对象处于“封闭”状态,而且这并不会避免调用open方法,它只是隐藏它)
发布于 2016-07-25 22:20:10
根据您所描述的,是的,调用open方法是必要的,尽管正如您所说,open的失败将不恰当地显示所有依赖测试的失败。
不过,我建议采取一种完全不同的办法。任何必须使用“裸金属”(即触摸系统资源)的类都应该努力成为只使用管道的类,即处理资源的绝对最小值。在您的问题中,您实际上清楚地描述了:您的方法“.检索和操作内容”。因此,我建议您有一个FileSystemProvider来检索内容,另一个单独的FileSystemManipulator来操作内容。后者将把FileSystemProvider作为注入的依赖项,从而使在单元测试FileSystemManipulator时模拟FileSystemProvider成为一个简单的任务,并使您的问题变得毫无意义。
当然,测试FileSystemProvider需要接触真正的文件,但是它的方法应该简单明了,几乎不需要单元测试。(人们可能会说,它们实际上不再是单元测试,因为它们接触到了系统资源;相反,它们是开发级集成测试,然后您可能会对它们应用严格的单元测试指导原则有点松懈。)
https://softwareengineering.stackexchange.com/questions/325673
复制相似问题