Jar*_*rek 17 java testing mocking mockito
我遇到了一个问题,我找不到一个优雅的解决方案.
所以问题是模拟Selenium web驱动程序,我不知道我应该如何测试/模拟void方法.
public void clickAndWait(String locator) {
if(isElementPresent(locator) == false) throw some exception;
selenium.clickAndWait(); //a problematic delegating call to selenium
}
Run Code Online (Sandbox Code Playgroud)
所以我要问的是,如何正确测试这样的方法,一个测试将被抛出异常,但是如何正确地测试我委托给的void方法?
hoi*_*loi 31
此Mockito文档中的以下代码示例说明了如何模拟void方法:
doThrow(new RuntimeException()).when(mockedList).clear();
// following throws RuntimeException:
mockedList.clear();
Run Code Online (Sandbox Code Playgroud)
Mar*_*ski 21
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
return null;
}
}).when(mock).method((SomeClass) anyObject());
Run Code Online (Sandbox Code Playgroud)
Sou*_*abh 10
之前的答案一直强调在每次通话时做某事(可能抛出异常).这样你做的事情如下:
doThrow(new RuntimeException()).when(mockedList).clear();
Run Code Online (Sandbox Code Playgroud)
然后调用存根服务(或逻辑),如:
mockedList.clear();
Run Code Online (Sandbox Code Playgroud)
它会产生一个例外.如果你想测试方法的正确功能怎么办可能会写出积极的测试用例.对这种情况进行模拟返回的方法可以通过以下方式完成:
doNothing().when(mockedList).clear();
Run Code Online (Sandbox Code Playgroud)
这意味着,由于您存储clear()了mockedListmock 的方法,您可以确定此方法不会影响单元的逻辑,仍然可以检查流的其余部分而不会生成异常.
| 归档时间: |
|
| 查看次数: |
72885 次 |
| 最近记录: |