`
hotdog
  • 浏览: 284914 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

学习Mockito - Mock对象的重置和Answer接口(方法预期回调接口)的应用

    博客分类:
  • test
阅读更多

Mock对象的重置

 

Mockito提供了reset(mock1,mock2……)方法,用来重置mock对象。当mock对象被重置后,它将回到刚创建完的状态,没有任何stubbing和方法调用。这个特性平时是很少用到的,因为我们大都为每个test方法创建mock,所以没有必要对它进行重置。

 

官方提供这个特性的唯一目的是使得我们能在有容器注入的mock对象中工作更为方便。所以,当决定要使用这个方法的时候,首先应该考虑一下我们的测试代码是否简洁和专注,测试方法是否已经超长了。

 

 

Answer接口(方法预期回调接口)的应用

 

Answer接口说明

对mock对象的方法进行调用预期的设定,可以通过thenReturn()来指定返回值,thenThrow()指定返回时所抛异常,通常来说这两个方法足以应对一般的需求。但有时我们需要自定义方法执行的返回结果,Answer接口就是满足这样的需求而存在的。另外,创建mock对象的时候所调用的方法也可以传入Answer的实例mock(java.lang.Class<T> classToMock, Answer defaultAnswer),它可以用来处理那些mock对象没有stubbing的方法的返回值。

 

InvocationOnMock对象的方法

Answer接口定义了参数为InvocationOnMock对象的answer方法,利用InvocationOnMock提供的方法可以获取mock方法的调用信息。下面是它提供的方法:

getArguments() 调用后会以Object数组的方式返回mock方法调用的参数。

getMethod() 返回java.lang.reflect.Method 对象

getMock() 返回mock对象

callRealMethod() 真实方法调用,如果mock的是接口它将会抛出异常

 

通过一个例子来看一下Answer的使用。我们自定义CustomAnswer类,它实现了Answer接口,返回值为String类型。

public class CustomAnswer implements Answer<String> {
    public String answer(InvocationOnMock invocation) throws Throwable {
        Object[] args = invocation.getArguments();
        Integer num = (Integer)args[0];
        if( num>3 ){
            return "yes";
        } else {
            throw new RuntimeException();
        }
    }
}
 这个返回值是这样的逻辑,如果调用mock某个方法输入的参数大于3返回”yes”,否则抛出异常。

 

Answer接口的使用

应用方式如下:

首先对List接口进行mock

List<String> mock = mock(List.class);

指定方法的返回处理类CustomAnswer,因为参数为4大于3所以返回字符串”yes”

when(mock.get(4)).thenAnswer(new CustomAnswer());

 

另外一种方式

doAnswer(new CustomAnswer()).when(mock.get(4));

对void方法也可以指定Answer来进行返回处理,如:

doAnswer(new xxxAnswer()).when(mock).clear();

当设置了Answer后,指定方法的调用结果就由我们定义的Answer接口来处理了。

 

另外我们也可以使用匿名内部类来进行应用:

@Test
public void customAnswerTest(){
    List<String> mock = mock(List.class);
    when(mock.get(4)).thenAnswer(new Answer(){
        public String answer(InvocationOnMock invocation) throws Throwable {
            Object[] args = invocation.getArguments();
            Integer num = (Integer)args[0];
            if( num>3 ){
                return "yes";
            } else {
                throw new RuntimeException();
            }
        }
    });
    System.out.println(mock.get(4));
}
 

 

 

分享到:
评论

相关推荐

    mockito-core-4.0.0-API文档-中英对照版.zip

    赠送jar包:mockito-core-4.0.0.jar; 赠送原API文档:mockito-core-4.0.0-javadoc.jar; 赠送源代码:mockito-core-4.0.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-4.0.0.pom; 包含翻译后的API文档:...

    mockito-core-4.0.0-API文档-中文版.zip

    赠送jar包:mockito-core-4.0.0.jar; 赠送原API文档:mockito-core-4.0.0-javadoc.jar; 赠送源代码:mockito-core-4.0.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-4.0.0.pom; 包含翻译后的API文档:...

    mockito-jar.zip

    mockito-all-1.10.19.jar mockito-core-4.5.1.jar mockito-junit-jupiter-4.5.1.jar mockito-junit-jupiter-4.5.1-sources.jar

    mockito-core-3.8.0-API文档-中英对照版.zip

    赠送jar包:mockito-core-3.8.0.jar; 赠送原API文档:mockito-core-3.8.0-javadoc.jar; 赠送源代码:mockito-core-3.8.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-3.8.0.pom; 包含翻译后的API文档:...

    mockito-core-3.9.0-API文档-中文版.zip

    赠送jar包:mockito-core-3.9.0.jar; 赠送原API文档:mockito-core-3.9.0-javadoc.jar; 赠送源代码:mockito-core-3.9.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-3.9.0.pom; 包含翻译后的API文档:...

    mockito-core-2.15.0-API文档-中英对照版.zip

    赠送jar包:mockito-core-2.15.0.jar; 赠送原API文档:mockito-core-2.15.0-javadoc.jar; 赠送源代码:mockito-core-2.15.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-2.15.0.pom; 包含翻译后的API文档...

    mockito-core-3.1.0-API文档-中英对照版.zip

    赠送jar包:mockito-core-3.1.0.jar; 赠送原API文档:mockito-core-3.1.0-javadoc.jar; 赠送源代码:mockito-core-3.1.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-3.1.0.pom; 包含翻译后的API文档:...

    mockito-1.9.5.zip

    - **验证方法调用**:Mockito 可以检查模拟对象的方法是否按预期被调用,以及调用次数和参数。 - **验证行为**:除了验证方法调用,还可以验证方法的调用顺序。 - **部分模拟**(Spying):允许对真实对象的部分...

    mockito-all-1.7.jar

    mockito-all-1.7

    mockito-all-1.10.5.jar

    mockito-all-1.10.5

    mockito-core-2.15.0-API文档-中文版.zip

    赠送jar包:mockito-core-2.15.0.jar; 赠送原API文档:mockito-core-2.15.0-javadoc.jar; 赠送源代码:mockito-core-2.15.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-2.15.0.pom; 包含翻译后的API文档...

    mockito-core-3.6.0.jar

    mockito-core-3.6.0.jarmockito-core-3.6.0.jar

    mockito-core-3.1.0.jar

    mockito-core-3.1.0

    mock开发所用到的2个核心JAR

    3. **Verification**:Mockito提供了一种验证机制,用于检查在测试过程中,mock对象的方法是否按照预期被调用。这有助于确保被测试代码的正确性。 4. **Matchers**:Mockito支持使用Hamcrest库的matchers,这使得...

    mockito-core-3.8.0-API文档-中文版.zip

    赠送jar包:mockito-core-3.8.0.jar; 赠送原API文档:mockito-core-3.8.0-javadoc.jar; 赠送源代码:mockito-core-3.8.0-sources.jar; 赠送Maven依赖信息文件:mockito-core-3.8.0.pom; 包含翻译后的API文档:...

    mockito-all-1.10.7.jar

    mockito-all-1.10.7

    mockito-core-3.8.0.jar

    mockito-core-3.8.0

    mockito-core-3.5.15.jar

    mockito-core-3.5.15

    mockito-core-3.12.1.jar

    mockito-core-3.12.1

    mockito-core-3.3.3.jar

    mockito-core-3.3.3.jarmockito-core-3.3.3.jar

Global site tag (gtag.js) - Google Analytics