如何使用 Mockito 在 class 中模拟 @injected 对象?
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
@ExtendWith(MockitoExtension.class)
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
对象为空。我怎样才能正确模拟并传递该对象?
我正在使用 JUnit 5 和 Mockito v4.2.0
我相信是因为你忘记注册了MockitoExtension
。要使 @Mock
和 @InjectMocks
生效,您必须注册它:
@ExtendWith(MockitoExtension.class)
public class MyClassTest {
@InjectMocks
MyClass myClass;
@Mock
MyDatabaseDao myDatabaseDao;
}
我有以下 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
@ExtendWith(MockitoExtension.class)
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
对象为空。我怎样才能正确模拟并传递该对象?
我正在使用 JUnit 5 和 Mockito v4.2.0
我相信是因为你忘记注册了MockitoExtension
。要使 @Mock
和 @InjectMocks
生效,您必须注册它:
@ExtendWith(MockitoExtension.class)
public class MyClassTest {
@InjectMocks
MyClass myClass;
@Mock
MyDatabaseDao myDatabaseDao;
}