zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点
    Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——
    Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线
    Civil 3D 二次开发 新建CLR项目出现错误C2143
    Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
    了解AutoCAD对象层次结构 —— 6 ——块表记录
    datepicker97使用
    使用angular 外接 templateUrl,使用ng-include
    angularJs 遮罩
    网上找的有关css兼容问题
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/9759292.html
Copyright © 2011-2022 走看看