首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@ReplaceWithMock不使用Springmockito注释进行模拟

@ReplaceWithMock不使用Springmockito注释进行模拟
EN

Stack Overflow用户
提问于 2012-09-03 19:53:26
回答 1查看 4.3K关注 0票数 4

我有一个正在尝试单元测试的类。我正在尝试使用Mockito测试它,并使用Springockito和Springockito-annotations来解决mockito的spring注入问题。

代码语言:javascript
复制
@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变量为空,从而导致它失败。我还不能想出如何隔离这个成员并模拟它。

EN

回答 1

Stack Overflow用户

发布于 2012-10-29 20:40:24

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

代码语言:javascript
复制
@Autowired
@WrapWithSpy
private SomeBean someBean;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12247360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档