我遇到了一个问题,我找不到一个优雅的解决方案。
所以问题出在Selenium web驱动程序的模拟上,我不知道该如何测试/模拟void方法。
public void clickAndWait(String locator) {
if(isElementPresent(locator) == false) throw some exception;
selenium.clickAndWait(); //a problematic delegating call to selenium
}
所以我想问的是,如何正确地测试这样的方法,一个测试就是抛出异常,但是如何正确地测试我委托的void方法呢?
发布于 2011-06-17 16:10:38
此Mockito documentation中的以下代码示例说明了如何模拟空方法:
doThrow(new RuntimeException()).when(mockedList).clear();
// following throws RuntimeException:
mockedList.clear();
发布于 2011-06-17 16:16:30
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
return null;
}
}).when(mock).method((SomeClass) anyObject());
发布于 2014-06-16 14:33:42
前面的答案一直强调在每次调用时都要做一些事情(可能会抛出异常)。这样,当您执行以下操作时:
doThrow(new RuntimeException()).when(mockedList).clear();
然后调用存根服务(或逻辑),如:
mockedList.clear();
它将生成一个异常。如果你想测试方法的正常功能,比如编写肯定的测试用例。模拟这种情况下的void返回方法可以通过以下方式完成:
doNothing().when(mockedList).clear();
这意味着,由于您为mockedList
模拟截断了clear()
方法,因此可以确保此方法不会影响单元的逻辑,并且仍然可以检查流的其余部分,而不会生成异常。
https://stackoverflow.com/questions/6382955
复制相似问题