繁体   English   中英

如何使用 Mockito 在 class 中模拟 @injected object?

[英]How to mock @injected object in class using Mockito?

我有以下 Java 代码:


文件名: MyClass.java


import javax.inject.Inject;
...

public class MyClass {
  @inject
  private MyDatabaseDao myDatabaseDao;

  public MyResponse process() {
    ...
    String value = myPrivateMethod(x, y, z);
    ...
  }

  private String myPrivateMethod(String x, String y, String z) {
    value = myDatabaseDao.operation(x, y, x); // Line Number 86
    ...
  }  
}

文件名: MyClassTest.java

public class MyClassTest {
  @InjectMocks
  MyClass myClass;

  @Mock
  MyDatabaseDao myDatabaseDao;

  @Test
  void testProcess() {
    ...

    Mockito.when(myDatabaseDao.operation(any(), any(), any()))
                .thenReturn(someValue);
    ...
    assertEquals(testResponse, myClass.process());    
  }
}

我在MyClass.java的第 86 行得到一个nullPointerException ,即该行中的myDatabaseDao object 是 null。 如何正确模拟和传递 object?

我正在使用 JUnit 5 和 Mockito v4.2.0

我相信这是因为您忘记注册MockitoExtension 要使@Mock@InjectMocks生效,你必须注册它:

@ExtendWith(MockitoExtension.class)
public class MyClassTest {

  @InjectMocks
  MyClass myClass;

  @Mock
  MyDatabaseDao myDatabaseDao;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM