我有下面的课程要测试:

@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在该测试中会模拟它。

10-06 02:34