我开始为遗留代码库编写JUnit测试用例。其中一个公共方法有多个if语句,并且基于条件它调用不同的私有方法。
我应该只编写一种测试方法并测试所有条件吗?或每种情况都有一种方法吗?
如果我为每个if条件编写单独的方法,我不会失去一致性吗?
测试私有方法的方法是什么?私有方法逻辑可能比公共方法更复杂。
答案 0 :(得分:4)
根据您要测试的场景数量来确定方法的数量,它与正在测试的场景的方法无关。
如果每个场景都有自己的代码进行设置,那么每个场景都会得到一个测试方法。如果您可以参数化测试,那么您可以使用一种测试方法并为每种方案传递不同的数据。
重要的是,对于每个输入组合,您希望测试成功或失败,而不依赖于其他测试。如果你把所有的测试都塞进一个方法然后就不会发生,那么第一次测试失败将阻止剩下的测试运行。
答案 1 :(得分:1)
我同意内森。测试应该采用场景而不是方法。有时遗留代码是以您需要直接测试私有方法的方式编写的。是的,代码应该重构。但如果你不能重构或想要先进行测试......
选项1 - 使方法包私有访问
这是一个非常安全的重构。
选项2 - 使用反射直接调用静态方法
如果您真的无法触摸代码,这是您可以做的最好的。我质疑不接触代码的要求。如果我们无法改进代码,我们是否应该将它留在角落里腐烂?
答案 2 :(得分:0)
从我的观点来看,在单元测试中使用较小的单元通常会导致更好的测试。 对你而言,这意味着将私有方法更改为包私有并为每个方法编写测试。