在编写需要解析XML文档的类时,我正在尝试使用TDD。假设该类称为XMLParser,其构造函数接受一个字符串,用于解析XML文件的路径。我想有一个Load()方法尝试将此XML加载到内存中,并对文件执行一些检查,例如文件系统错误,无论是否是XML文件等。
我的问题是关于替代方案:我已经读过,使用您需要测试的私有方法是不好的做法,并且您应该能够只测试公共接口并让私有方法做他们的事情。但在这种情况下,此功能非常重要,我认为它不应公开。
有没有人对这样的场景有好的建议?
答案 0 :(得分:3)
我建议稍微重新设计一下你的架构。目前,您有一个嵌入了低级功能的高级类。将其拆分为属于不同层的多个类(我在这里使用术语“层”)。
示例:
现在你可以独立测试所有这三个类了!
你会发现你的高级课程只不过是只编写两个较低级别的课程。
答案 1 :(得分:1)
使用no access修饰符(下一个属于私有)并在同一个包中编写测试。
良好的OOD很重要,但对于非常重要的功能测试更为重要。良好实践始终只是一个指导原则,在一般情况下它们都很好。
您还可以尝试将该特定文件检查行为封装在另一个对象中,并让您的解析器将其实例化并使用它。这可能就是我要做的。通过这种方式,您甚至可以轻松地在其他地方使用此功能。
答案 2 :(得分:0)
您可以将子类作为测试包的一部分,将公共访问器公开给私有方法(然后应该受到保护)。
Public class TestableClass : MyClass
{
public someReturnType TestMethod() {
return base.PrivateMethod();
}
}