未调用java Mockito验证方法
我是Mockito的初学者,正在尝试测试下面的课程
@Service
public class MyService {
public static final Logger logger = LoggerFactory.getLogger(MyService.class);
ObjectMapper objectMapper = new ObjectMapper();
public void logData(String personData) throws IOException{
Person person = objectMapper.readValue(personData, Person.class);
// log info
logger.info("log person: {}, {}", person.getName(), person.getAge());
}
}
下面是我的测试类,我正在尝试测试是否调用ObjectMapper的readValue方法
@RunWith(MockitoJUnitRunner.class)
public class MyServiceTest {
public static final Logger logger = LoggerFactory.getLogger(MyServiceTest.class);
ObjectMapper objectMapper = mock(ObjectMapper.class);
MyService myService = new MyService();
@Test
public void verifyCallToReadValue() throws IOException{
String personData = "{\"Name\":\"debieA\",\"Age\":\"31\"}";
myService.logData(personData);
verify(objectMapper, times(1)).readValue(personData, Person.class);
}
}
我得到的错误是“需要但未调用需要但未调用: 对象映射器。读取值(……);"
如何解决此问题
# 1 楼答案
必须将
ObjectMapper
mock作为依赖项注入MyService
永远不要像在MyService(
ObjectMapper objectMapper = new ObjectMapper()
)中那样,使用new
在类本身内部创建类的依赖项请注意我在代码中的注释和更改:
然后在测试中
# 2 楼答案
使用@Spy注释,Spy非常聪明,可以调用