@ReplaceWithMock不使用Springmockito注释进行嘲讽



我有一个类正在尝试单元测试。我正在尝试使用Mockito进行测试,为了解决Mockito的春季注入问题,我使用了Springockito和Springockito注释。

@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);
    }
}

如果我删除@ReplaceWithMockprivate RestOperations restTemplate行,那么它会进行正确的调用,并且可以验证该值是否正确。然而,我想模拟处理器内的RestOperations对象,但使用@ReplaceWithMock会使restTemplate变量为null,导致它失败。我还没能想出如何隔离这个成员并模拟它。

遇到类似的问题时,我发现用@WrapWithSpy或@ReplaceWithMock进行注释是不够的。也就是说,测试类中的字段为null。根据Arasu的评论,除了springockito注释之外,还添加了@Autowired注释,解决了这个问题——尽管它看起来确实很奇怪。。。

@Autowired
@WrapWithSpy
private SomeBean someBean;

相关内容

  • 没有找到相关文章

最新更新