2014-08-29 87 views
4

我只是通过简化事情来重构许多代码部分。 现在我需要重构测试以及再次使它们变绿,这并不困难。Mockito:如何识别测试中未使用的.when()

但是现在我挣扎了一下,因为我看到我不再需要一些.when()声明,因为这些Mocks不会再被调用。问题是他们不会让我的测试变成红色,所以我只能通过仔细检查每个测试并将其与代码进行比较来识别它们,这是令人讨厌的,并导致让它变成这样。

是否有任何可能使未使用.when()的抛出错误或类似的东西?就像从未发生过的验证一样?这足够像setUp:Mockito.enableDebugMode()或其他,也许有这样的可能性吗? ..

最好

+0

尝试简单地删除when()并运行测试。如果它变成红色,这个'when'显然是必需的。 – ponomandr 2014-08-29 08:23:23

+0

如果你已经重新考虑了你的代码并破坏了你的测试,那么你正在做坏事。重新分解后,您的测试应保持绿色。如果你重新考虑更小的步骤,那么你可以一次处理一个测试用例,而不会在这个黑暗的地方发现自己。此外,你的测试应该是小而容易理解,否则你的课堂测试做得太多。 – Brad 2014-08-30 11:09:25

回答

0

也许你可以为每个when()调用添加一个verify()调用。所以当调用没有被执行时抛出一个异常?

如果有问题的自动化解决方案,请留下回复。

2

选项1 你可以从你的测试一次一个(由@ponomandr建议),直到他们未能消除对when()呼叫。失败的测试意味着您将调用添加到您的测试中,因为它必须是必需的。

选项2 虽然你也可以通过添加verify()断言每次调用when()(由@HansiKrankl的建议),这意味着增加更多的代码(绒毛)到你的测试用例解决这个问题。

选项3 正如你可以使用一个代码覆盖工具,如Emma另一种选择whichi你可以从你的IDE中运行。然后运行测试,然后看看您的课堂中是否正在进行测试。

选项4 还有其他的建议,试图count the number of invocations

就我个人而言,我会与选项1并开始清理测试一个接一个。您将逐一了解对它们进行测试的测试,这是一个清理它们的机会,因此它们更易于维护。

+0

我发现选项1能够很好地工作,尤其是当您可以通过测试来交替进行小型重构以减少噪音时。 – cjstehno 2015-04-06 21:31:34

0

嗯,什么是使用Mockito.verifyNoMoreInteractions(YOUR_MOCKS)? 如果使用Mockito.when()配置了一些模拟对象,但在此模拟上未调用相应的Mockito.verify()方法,则会引发异常。 当然可能会导致误报,但最好没有。