编程语言
首页 > 编程语言> > java – @ReplaceWithMock没有使用Springmockito-annotations进行模拟

java – @ReplaceWithMock没有使用Springmockito-annotations进行模拟

作者:互联网

我有一个班级,我正在尝试单元测试.我正在尝试使用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;

标签:java,junit,spring,mockito,springmockito
来源: https://codeday.me/bug/20190704/1374351.html