我想要测试下面的课程:
@Component
public class ToBeTested {
@Autowired
private HelperA helperA;
@Autowired
private HelperB helperB;
... //10 other such helpers
}
我想模仿HelperA课程。我如何在jUnit中执行此操作?我不想嘲笑其他助手类。我也不想写@Spy& @Resource用于所有帮助程序,并在测试用例中使用@InjectMocks。
我是否有办法在测试用例中只将HelperA的模拟注入到ToBeTested类中?
答案 0 :(得分:1)
总结一下,您想要使用模拟HelperA
而使用@Autowired
HelperB
?
我写了一篇关于此的文章可以提供帮助:http://www.sleepeasysoftware.com/how-to-mock-out-a-deeply-nested-class-in-spring-without-going-insane/
总结一下,把它放在测试类的顶部:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ASubclassOfYourRealConfig.class)
然后你创建ASubclassOfYourRealConfig
看起来像这样:
public class ASubclassOfYourRealConfig extends YourRealConfig {
@Bean
public HelperA getHelperA() {
return mock(HelperA.class);
}
}
在您的测试课程中,@Autowire
HelperA
可以像平常一样,但在该测试中实际上会被Mockito嘲笑。
答案 1 :(得分:0)
如果您只想要helperB,那么您需要@InjectMocks
。
@RunWith(MockitoJUnitRunner.class)
public class MyTest() {
@InjectMocks
public ToBeTested toBeTested;
@Mock
private HelperB helperB;
...your tests go here
}
当然,这将离开你的助手A null
。如果你想要两者兼而有之,你只需要为你的测试配置一个Spring配置,将helperB设置为一个模拟bean(通过工厂方法)并使用SpringJUnit4ClassRunner
运行整个事件)