我试图编写代码来检查代码的实现是否依赖于Java中的Math.sqrt()
。
我尝试使用下面的代码与JUnit和jMockit一起抛出错误:
@Test
public void testSquareNumsWithoutSQRT(@Mocked final Math m) {
// ...
}
在做了一些研究后,我现在明白了为什么我不能模拟那个库,但这仍然让我遇到了原始问题。有没有办法检查方法是否正在调用数学库?
答案 0 :(得分:1)
您可以使用PowerMock来模拟最终类和静态方法。但是如果你必须使用PowerMock,那就意味着你的代码出了问题。
请记住,为了避免脆弱的测试,你不应该测试实现,但结果。
有很多关于模拟的有用文章。例如,请参阅this one。这是摘录:
模拟结构与实现细节紧密耦合,导致许多测试在修改这些细节时中断。
对于您来说,了解平方根的计算方式或者您是否需要知道结果是否正确,这对您来说真的很重要吗?
答案 1 :(得分:0)
我理解这个问题似乎是非正统的,但我的任务要求是验证一些实现的方法没有使用特定的java.lang.Math方法。
为了在不影响系统的情况下解决它,我使用解析代码并搜索不应该存在的代码。