java - doThrow() doAnswer() doNothing() 和 doReturn() 在 mockito 中的用法

标签 java mockito

我正在学习 mockito,我从 link 中了解了上述函数的基本用法。 .

但是我想知道它是否可以用于任何其他情况?

最佳答案

doThrow :主要用于在模拟对象中调用方法时抛出异常。

public void validateEntity(final Object object){}
Mockito.doThrow(IllegalArgumentException.class)
.when(validationService).validateEntity(Matchers.any(AnyObjectClass.class));

doReturn : 当你想在方法执行时返回一个返回值时使用。

public Socket getCosmosSocket() throws IOException {}
Mockito.doReturn(cosmosSocket).when(cosmosServiceImpl).getCosmosSocket();

doAnswer:有时您需要对传递给方法的参数执行一些操作,例如,添加一些值、进行一些计算甚至修改它们 doAnswer 给您答案 在调用该方法时正在执行的接口(interface),此接口(interface)允许您通过 InvocationOnMock 参数与参数进行交互。另外,answer 方法的返回值将是 mocked 方法的返回值。

public ReturnValueObject quickChange(Object1 object);
Mockito.doAnswer(new Answer<ReturnValueObject>() {

        @Override
        public ReturnValueObject answer(final InvocationOnMock invocation) throws Throwable {

            final Object1 originalArgument = (invocation.getArguments())[0];
            final ReturnValueObject returnedValue = new ReturnValueObject();
            returnedValue.setCost(new Cost());

            return returnedValue ;
        }
}).when(priceChangeRequestService).quickCharge(Matchers.any(Object1.class));

doNothing:(来自 documentation ) 使用 doNothing() 将 void 方法设置为不执行任何操作。请注意,模拟上的 void 方法默认情况下什么都不做!但是,doNothing() 派上用场的情况很少见:

  • 对 void 方法的连续调用 stub :

    doNothing().
    doThrow(new RuntimeException())
    .when(mock).someVoidMethod();
    
    //does nothing the first time:
    mock.someVoidMethod();
    
    //throws RuntimeException the next time:
    mock.someVoidMethod();
    
  • 当你窥探真实的对象并且你想让 void 方法什么都不做时:

    List list = new LinkedList();
    List spy = spy(list);
    
    //let's make clear() do nothing
    doNothing().when(spy).clear();
    
    spy.add("one");
    
    //clear() does nothing, so the list still contains "one"
    spy.clear();
    

关于java - doThrow() doAnswer() doNothing() 和 doReturn() 在 mockito 中的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28836778/

相关文章:

java - ResourceAccessException 内 SocketTimeout 异常的 Junit 代码覆盖率

java - Mockito 和 Spring Autowiring

java - 从 arraylist java 获取值?

java - 作为 Gradle Java 项目的一部分在本地运行 Dynamodb

java - 在pom.xml中配置本地jar

java - 如何从JavaFX中的Service handler方法获取Task实例

java - 无法在我的测试中注入(inject) Bean(@Spy 注入(inject) bean 的子级)

Java - 在 JVM 中修改 Object 类的 toString()

java - Mockito:如何模拟 setter 的 setter?

java - 访问 recyclerview 适配器中的父 View 按钮?