How to mock/test method that returns void, possibly in Mockito
我遇到了一个问题,找不到一个很好的解决办法。
所以问题在于模拟Selenium Web驱动程序,我不知道应该如何测试/模拟void方法。
1 2 3 4 | public void clickAndWait(String locator) { if(isElementPresent(locator) == false) throw some exception; selenium.clickAndWait(); //a problematic delegating call to selenium } |
所以我要问的是,如何正确地测试这样一个方法,一个测试将用于异常被抛出,但是如何正确地对我委托给的那个无效方法进行测试呢?
此mockito文档中的以下代码示例说明了如何模拟void方法:
1 2 3 4 | doThrow(new RuntimeException()).when(mockedList).clear(); // following throws RuntimeException: mockedList.clear(); |
1 2 3 4 5 6 7 |
以前的答案一直在强调每次打电话都要做些什么(可能会抛出异常)。当你这样做的时候:
1 |
然后调用存根服务(或逻辑),比如:
1 | mockedList.clear(); |
它将生成一个异常。如果您想测试方法的正确功能,可以编写积极的测试用例。模拟这种情况下的空返回方法可以通过以下方式完成:
1 | doNothing().when(mockedList).clear(); |
这意味着,由于您对
您还可以使用:
- 方法mockito.verify(mock/spy)检查调用该方法的次数。
- 或者使用参数captor查看/检查传递给void方法的一些参数。
在Java 8中,这可以做得更干净一些。
1 2 3 4 | doAnswer((i) -> { // Do stuff with i.getArguments() here return null; }).when(*mock*).*method*(*methodArguments*); |
您可以在方法调用上控制一个异常,下面是一个如何执行该操作的小示例:
1 |
然后调用
或者,您可以计算调用方法的次数,下面是一个如何执行该操作的小示例:
1 | verify(mockedList, times(1)).clear(); |