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