我有下面的课程要测试:
@Component
public class ToBeTested {
@Autowired
private HelperA helperA;
@Autowired
private HelperB helperB;
... //10 other such helpers
}
我只想模拟HelperA类。如何在jUnit中执行此操作?我不想嘲笑其他助手类。我也不想为所有助手编写@Spy&@Resource并在测试用例中使用@InjectMocks。
我有办法只将HelperA的模拟注入测试用例中的ToBeTested类吗?
最佳答案
总而言之,您要使用模拟的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在该测试中会模拟它。