我有一个正在尝试单元测试的类。我正在尝试使用Mockito测试它,并使用Springockito和Springockito-annotations来解决mockito的spring注入问题。
@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和private RestOperations restTemplate行,那么它就会发出正确的调用,并且可以验证该值是否正确。但是,我想模拟处理器内部的RestOperations对象,但是使用@ReplaceWithMock会使restTemplate变量为空,从而导致它失败。我还不能想出如何隔离这个成员并模拟它。
发布于 2012-10-29 20:40:24
遇到类似的问题时,我发现使用@WrapWithSpy或@ReplaceWithMock进行注释是不够的。也就是说,测试类中的字段为空。根据Arasu的评论,在springockito注释之外添加@Autowired注释解决了这个问题-尽管它看起来确实很奇怪……
@Autowired
@WrapWithSpy
private SomeBean someBean;https://stackoverflow.com/questions/12247360
复制相似问题