Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mockito doReturn,如果调用了具有特定类的对象的方法_Java_Unit Testing_Spring Boot_Junit_Mockito - Fatal编程技术网

Java Mockito doReturn,如果调用了具有特定类的对象的方法

Java Mockito doReturn,如果调用了具有特定类的对象的方法,java,unit-testing,spring-boot,junit,mockito,Java,Unit Testing,Spring Boot,Junit,Mockito,如果我有一个对象MyObject,我想在调用该对象的某个方法时返回一些值。例如,类似这样的事情: doReturn(someValue).when(Mockito.any(MyObject.class)).getSomeValue(); 我试过这样做,但不起作用: org.mockito.exceptions.misusing.NullInsteadOfMockException: Argument passed to when() is null! 您需要使用Mockito.mock(M

如果我有一个对象MyObject,我想在调用该对象的某个方法时返回一些值。例如,类似这样的事情:

doReturn(someValue).when(Mockito.any(MyObject.class)).getSomeValue();
我试过这样做,但不起作用:

org.mockito.exceptions.misusing.NullInsteadOfMockException: 
Argument passed to when() is null!

您需要使用
Mockito.mock(MyObject.class)
来创建对象的mock

目前,您正在使用Mockito#any,它是一个参数匹配器,用于在为任何给定参数调用存根方法时定义mock上的行为

@Test
public void testMock() throws InterruptedException {
    MyObject myObjectMock = Mockito.mock(MyObject.class);
    doReturn(2).when(myObjectMock).getSomeValue();

    System.out.println(myObjectMock.getSomeValue()); // prints 2
}

private class MyObject {
    public int getSomeValue() {
        return 1;
    }
}

或者,您可以使用Mockito注释:

@RunWith(MockitoJUnitRunner.class)
public class YourTestClass {
  @Mock 
  MyObject myObjectMock

避免您在设置或测试方法中手动模拟该对象。

您是对的,您的示例是有效的,但在我的情况下,我想我必须添加一些附加内容,因为它不返回任何值。@mirzak我不太明白您的意思,您能举个例子吗?此解决方案是正确的,我的对象被无关的内容覆盖。我只需使用ReflectionTestUtils将其设置为我的字段。ReflectionTestUtils.setField(this.someService,“myField”,mock);这是一个更好的解决方案,因为您可以在mutliple测试中使用模拟对象(此处为myObjectMock)。在我的项目中,我们使用@ExtendWith(MockitoExtension.class)而不是@RunWith(MockitoJUnitRunner.class),您可以声明一个没有注释的字段,但是您必须在@Before方法中手动实例化模拟。请注意,ExtendWith是JUnit5,这个答案是在JUnit5可用之前编写的。