• mock获取入参数并动态设置返回值


    /*
      * Copyright (c) 2007 Mockito contributors
      * This program is made available under the terms of the MIT License.
      */
      package org.mockitousage.stubbing;
       
      import org.junit.Test;
      import org.mockito.Mock;
      import org.mockito.invocation.InvocationOnMock;
      import org.mockito.stubbing.Answer;
      import org.mockitousage.IMethods;
      import org.mockitoutil.TestBase;
       
      import java.lang.reflect.Method;
      import java.util.Set;
       
      import static org.junit.Assert.*;
      import static org.mockito.Mockito.*;
       
      public class StubbingWithCustomAnswerTest extends TestBase {
      @Mock
      private IMethods mock;
       
      @Test
      public void shouldAnswer() throws Exception {
      when(mock.simpleMethod(anyString())).thenAnswer(new Answer<String>() {
      public String answer(InvocationOnMock invocation) throws Throwable {
      String arg = invocation.getArgument(0);
       
      return invocation.getMethod().getName() + "-" + arg;
      }
      });
       
      assertEquals("simpleMethod-test", mock.simpleMethod("test"));
      }
       
      @Test
      public void shouldAnswerWithThenAnswerAlias() throws Exception {
      RecordCall recordCall = new RecordCall();
      Set<?> mockedSet = (Set<?>) when(mock(Set.class).isEmpty()).then(recordCall).getMock();
       
      mockedSet.isEmpty();
       
      assertTrue(recordCall.isCalled());
      }
       
      @Test
      public void shouldAnswerConsecutively() throws Exception {
      when(mock.simpleMethod())
      .thenAnswer(new Answer<String>() {
      public String answer(InvocationOnMock invocation) throws Throwable {
      return invocation.getMethod().getName();
      }
      })
      .thenReturn("Hello")
      .thenAnswer(new Answer<String>() {
      public String answer(InvocationOnMock invocation) throws Throwable {
      return invocation.getMethod().getName() + "-1";
      }
      });
       
      assertEquals("simpleMethod", mock.simpleMethod());
      assertEquals("Hello", mock.simpleMethod());
      assertEquals("simpleMethod-1", mock.simpleMethod());
      assertEquals("simpleMethod-1", mock.simpleMethod());
      }
       
      @Test
      public void shouldAnswerVoidMethod() throws Exception {
      RecordCall recordCall = new RecordCall();
       
      doAnswer(recordCall).when(mock).voidMethod();
       
      mock.voidMethod();
      assertTrue(recordCall.isCalled());
      }
       
      @Test
      public void shouldAnswerVoidMethodConsecutively() throws Exception {
      RecordCall call1 = new RecordCall();
      RecordCall call2 = new RecordCall();
       
      doAnswer(call1)
      .doThrow(new UnsupportedOperationException())
      .doAnswer(call2)
      .when(mock).voidMethod();
       
      mock.voidMethod();
      assertTrue(call1.isCalled());
      assertFalse(call2.isCalled());
       
      try {
      mock.voidMethod();
      fail();
      } catch (UnsupportedOperationException e) {
      }
       
      mock.voidMethod();
      assertTrue(call2.isCalled());
      }
       
      @Test
      public void shouldMakeSureTheInterfaceDoesNotChange() throws Exception {
      when(mock.simpleMethod(anyString())).thenAnswer(new Answer<String>() {
      public String answer(InvocationOnMock invocation) throws Throwable {
      assertTrue(invocation.getArguments().getClass().isArray());
      assertEquals(Method.class, invocation.getMethod().getClass());
       
      return "assertions passed";
      }
      });
       
      assertEquals("assertions passed", mock.simpleMethod("test"));
      }
       
      private static class RecordCall implements Answer<Object> {
      private boolean called = false;
       
      public boolean isCalled() {
      return called;
      }
       
      public Object answer(InvocationOnMock invocation) throws Throwable {
      called = true;
      return null;
      }
      }
       
      }

    2.    当mock一个对象,且执行此对象中的方法没有返回值时,使用下面的方法:

    import org.mockito.Mockito;
    import org.mockito.invocation.InvocationOnMock;
    import org.mockito.stubbing.Answer;

    类名   对象 = Mockito.mock(类名.class);
            Mockito.doAnswer(new Answer<Object>() {
                public Object answer(InvocationOnMock invocation) {
                    Object[] args = invocation.getArguments();
                    return "called with arguments: " + args;
                }
            }).when(对象).方法名();

    --------------------- 本文来自 flysun3344 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/flysun3344/article/details/52065492?utm_source=copy 

  • 相关阅读:
    Oracle死锁只会回滚跟死锁有关的那条SQL,而不会回滚整个事务
    Mysql安装过程(linux:2.6.18-194.el5,Mysql:)
    格式化分区,报/dev/sdb1 is apparently in use by the system; will not make a filesystem here!
    安装Oracle 11gR2,报错:[INS-06101] IP address of localhost could not be determined
    mysql-5.5.25-winx64在win7 x64 免安装配置
    insert遭遇阻塞
    linux中轻松使用backspace和上下按键
    排序
    MySQL
    基于Boost的同步TCP通信
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/9759292.html
Copyright © 2020-2023  润新知