首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mockito verify测试接口

使用Mockito verify测试接口
EN

Stack Overflow用户
提问于 2015-05-21 19:29:28
回答 1查看 734关注 0票数 0

我正在尝试测试一个类,它有一个带有3个参数方法的接口。我正在测试的方法是这样的

代码语言:javascript
复制
formElementCallback.stateChanged(formElement1, FormElementState.DISABLED, "");
formElementCallback.stateChanged(formElement2, FormElementState.DISABLED, null);

这是测试方法

代码语言:javascript
复制
Mockito.verify(mockFormElementCallback, Mockito.atLeastOnce()).stateChanged(Mockito.argThat(new ArgumentMatcher<FormElement>() {
            @Override
            public boolean matches(Object argument) {
                //matcher for formObject
                FormElement formElement = (FormElement) argument;
                return true;
            }
        }), Mockito.argThat(new ArgumentMatcher<FormElementState>() {
            @Override
            public boolean matches(Object argument) {
                //matcher for state
                return true;
            }
        }), Mockito.argThat(new ArgumentMatcher<Comparable>() {
            @Override
            public boolean matches(Object argument) {
                //matcher for value
                return true;
            }
        }));

由于接口被调用了2次,因此Mockito.verify(object,Mockito.times(1) )不起作用。我试图将逻辑与atLeastOnce()结合起来,但是每当我断言formElement1时,formElement2也会被调用,因此测试失败。即使我使用if语句,值和状态的匹配器作用域也不会知道表单元素作用域。

有没有办法让我这样断言呢?

代码语言:javascript
复制
If argument equals formElement1, Assert state DISABLED, Assert value ""
If argument equals formElement2, Assert state DISABLED, Assert value null
Else AssertTrue(false) since interface must not be called with other form elements.

编辑:解决方案不能是将3个参数组合成一个,并将状态和值放在formElement类中。这是为了防止外部类访问formElement本身并手动更改状态。还有另一个类似的实现:.stateChanged(FormElementType类型,FormElementState状态,可比值);

EN

回答 1

Stack Overflow用户

发布于 2015-05-22 00:57:02

你能这样断言吗?

代码语言:javascript
复制
verify(formElementCallback).stateChanged(
    formElement1, FormElementState.DISABLED, "");
verify(formElementCallback).stateChanged(
    formElement2, FormElementState.DISABLED, null);
verifyNoMoreInteractions(formElementCallback);

参见the javadoc for verifyNoMoreInteractions。如果这很重要,您也可以对InOrder执行同样的操作。

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

https://stackoverflow.com/questions/30372439

复制
相关文章

相似问题

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