gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:26:43 30 4
gpt4 key购买 nike

我有一个正在尝试单元测试的类(class)。我正在尝试使用 Mockito 对其进行测试,并使用 Springockito 和 Springockito-annotations 解决带有 mockito 的 Spring 注入(inject)问题。

@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 注释是不够的。也就是说测试类中的字段为空。根据 Arasu 的评论,在 springockito 注释之外添加 @Autowired 注释解决了这个问题——尽管它看起来确实很奇怪……

@Autowired
@WrapWithSpy
private SomeBean someBean;

关于java - @ReplaceWithMock 不使用 Springmockito 注释进行模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12247360/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com