如何测试是否已调用java.lang.Math方法?

时间:2016-05-26 21:23:39

标签: java math junit mocking jmockit

我试图编写代码来检查代码的实现是否依赖于Java中的Math.sqrt()

我尝试使用下面的代码与JUnit和jMockit一起抛出错误:

@Test 
public void testSquareNumsWithoutSQRT(@Mocked final Math m) {
  // ...
}

在做了一些研究后,我现在明白了为什么我不能模拟那个库,但这仍然让我遇到了原始问题。有没有办法检查方法是否正在调用数学库?

2 个答案:

答案 0 :(得分:1)

您可以使用PowerMock来模拟最终类和静态方法。但是如果你必须使用PowerMock,那就意味着你的代码出了问题。

请记住,为了避免脆弱的测试,你不应该测试实现,但结果

有很多关于模拟的有用文章。例如,请参阅this one。这是摘录:

  

模拟结构与实现细节紧密耦合,导致许多测试在修改这些细节时中断。

对于您来说,了解平方根的计算方式或者您是否需要知道结果是否正确,这对您来说真的很重要吗?

答案 1 :(得分:0)

我理解这个问题似乎是非正统的,但我的任务要求是验证一些实现的方法没有使用特定的java.lang.Math方法。

为了在不影响系统的情况下解决它,我使用解析代码并搜索不应该存在的代码。