首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何模拟/测试返回void的方法,可能在Mockito中

如何模拟/测试返回void的方法,可能在Mockito中
EN

Stack Overflow用户
提问于 2011-06-17 16:00:53
回答 5查看 77.4K关注 0票数 17

我遇到了一个问题,我找不到一个优雅的解决方案。

所以问题出在Selenium web驱动程序的模拟上,我不知道该如何测试/模拟void方法。

代码语言:javascript
复制
public void clickAndWait(String locator) {
    if(isElementPresent(locator) == false) throw some exception;
    selenium.clickAndWait(); //a problematic delegating call to selenium
}

所以我想问的是,如何正确地测试这样的方法,一个测试就是抛出异常,但是如何正确地测试我委托的void方法呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-17 16:10:38

Mockito documentation中的以下代码示例说明了如何模拟空方法:

代码语言:javascript
复制
doThrow(new RuntimeException()).when(mockedList).clear();

// following throws RuntimeException:
mockedList.clear();
票数 30
EN

Stack Overflow用户

发布于 2011-06-17 16:16:30

代码语言:javascript
复制
doAnswer(new Answer<Void>() {
        @Override
        public Void answer(InvocationOnMock invocation) throws Throwable {

            return null;
        }
    }).when(mock).method((SomeClass) anyObject());
票数 21
EN

Stack Overflow用户

发布于 2014-06-16 14:33:42

前面的答案一直强调在每次调用时都要做一些事情(可能会抛出异常)。这样,当您执行以下操作时:

代码语言:javascript
复制
doThrow(new RuntimeException()).when(mockedList).clear();

然后调用存根服务(或逻辑),如:

代码语言:javascript
复制
mockedList.clear();

它将生成一个异常。如果你想测试方法的正常功能,比如编写肯定的测试用例。模拟这种情况下的void返回方法可以通过以下方式完成:

代码语言:javascript
复制
doNothing().when(mockedList).clear();

这意味着,由于您为mockedList模拟截断了clear()方法,因此可以确保此方法不会影响单元的逻辑,并且仍然可以检查流的其余部分,而不会生成异常。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6382955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档