gpt4 book ai didi

java - 使一个类成为 Mockito 模拟而不调用模拟

转载 作者:行者123 更新时间:2023-11-30 03:17:03 24 4
gpt4 key购买 nike

我有一个基于 Spring 的使用服务的 Java 应用程序。对于 some reasons ,我需要 Autowiring 一个仅为了单元测试而实现的服务。我希望这个 Autowiring 类成为 Mockito 模拟,这样我就可以将它传递给所有 Mockito 方法(when() 等)。我应该扩展或实现一些 Mockito 类吗?

例如

@Profile("test")
@Primary
@Service
public class MockAService implements AService {
public void callMethod(){}
}

然后在测试中我有

{
System.setProperty("spring.profiles.active", "test");
}

@Autowired AService aservice;

在我想要做的测试方法中:

@Test
public void test(){
doNothing().when(aService).callMethod();
}

最佳答案

只需使用 @Spy并在 @Before 方法中调用 MockitoAnnotations.initMocks。它将为您注入(inject)的服务创建一个 spy 。

例如,我想测试 MyService,它依赖于 MyDao。我希望 MyService 使用我的模拟 dao。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/com/stackoverflow/mokito/exemple/spring.xml"})
public class TestCase {
@Resource
@InjectMocks
private MyService service;

@Resource
@Spy
private MyDao dao;

public void setup() {
MockitoAnnotations.initMocks(this);
}
}

但是你的 spring 上下文现在是“脏的”。下一个测试类将使用相同的 spring 上下文,MyService 仍将使用模拟。所以不要忘记在@After中重置模拟

关于java - 使一个类成为 Mockito 模拟而不调用模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32313362/

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