我有一个班级,我正在尝试单元测试.我正在尝试使用Mockito测试它,并使用mockito解决弹簧注入我正在使用
Springockito和
Springockito-annotations.
@ContextConfiguration(loader = SpringockitoContextLoader.class,
locations = {"classpath:testApplication-context-EU.xml"})
public class RelatedSearchToHotUrlProcessorTest extends AbstractJUnit4SpringContextTests {
@Autowired
RelatedSearchToHotUrlProcessor processor;
@ReplaceWithMock
private RestOperations restTemplate;
@Test
public void testGetCategoryFromIdWithNoStoredAlias() {
Taxonomy mockTaxonomy = mock(Taxonomy.class, RETURNS_DEEP_STUBS);
GraphType.Node mockNode = mock(GraphType.Node.class);
when(restTemplate.getForObject(anyString(), eq(Taxonomy.class))).thenReturn(mockTaxonomy);
when(mockTaxonomy
.getRev()
.get(0)
.getCountry()
.get(0)
.getGraph()
.getNodeOrAtom()
.get(0)).thenReturn(mockNode);
when(mockNode.getAlias()).thenReturn("mockalias");
String categoryAlias = processor.getCategoryAliasFromId(13130L);
assertEquals("mockalias", categoryAlias);
}
}
如果我删除@ReplaceWithMock和私有RestOperations restTemplate行,那么它会进行正确的调用,并且可以验证值是否正确.但是,我想在处理器内部模拟RestOperations对象,但是使用@ReplaceWithMock会使restTemplate变量为null,从而导致它失败.我无法弄清楚如何隔离这个成员并嘲笑它.
最佳答案 遇到类似的问题,我发现使用@WrapWithSpy或@ReplaceWithMock进行注释是不够的.也就是说测试类中的字段为空.根据Arasu的评论,除了springockito注释之外添加@Autowired注释修复了问题 – 虽然看起来很奇怪……
@Autowired
@WrapWithSpy
private SomeBean someBean;