【问题标题】:@ReplaceWithMock not mocking using Springmockito-annotations@ReplaceWithMock 不使用 Springmockito-annotations 进行模拟
【发布时间】:2012-09-03 11:53:26
【问题描述】:

我有一门课,我正在尝试单元测试。我正在尝试使用 Mockito 对其进行测试,并使用 Springockito 和 Springockito-annotations 来解决使用 mockito 的弹簧注入。

@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 变量为空,导致它失败。我还没有弄清楚如何隔离这个成员并模拟它。

【问题讨论】:

  • 是的,我收到 NullPointerException 异常,因为 restTemplate.getForObject() 调用的 restTemplate 对象为 null,但我希望它是一个模拟对象
  • 尝试使用@Autowired 注入
  • 如果您定义RelatedSearchToHotUrlProcessorset.setRestTemplate(),您可以自己注入模拟作为测试的一部分,消除@ReplaceWithMock 注释的任何潜在问题

标签: java spring junit mockito springmockito


【解决方案1】:

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

@Autowired
@WrapWithSpy
private SomeBean someBean;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-03-18
  • 2020-08-20
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
相关资源
最近更新 更多