如何模拟正在测试的类的某些对象



我有以下想要测试的类:

@Component
public class ToBeTested {
 @Autowired
 private HelperA helperA;
 @Autowired
 private HelperB helperB;
 ... //10 other such helpers
}

我只想模拟助手A类。如何在 jUnit 中执行此操作?我不想嘲笑其他辅助类。我也不想为所有帮助程序编写@Spy和@Resource并在测试用例中使用@InjectMocks。

有没有办法让我只将助手 A 的模拟注入到测试用例中的 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嘲笑。

如果你只需要 helperB,那么你需要 @InjectMocks .

@RunWith(MockitoJUnitRunner.class)
public class MyTest() {
@InjectMocks
public ToBeTested toBeTested;
@Mock 
private HelperB helperB;
...your tests go here
}

当然,这会让你的帮手null。如果你想同时拥有两者,你只需要一个 Spring 配置来测试,将 helperB 设置为模拟 bean(通过工厂方法),然后用 SpringJUnit4ClassRunner 运行整个事情。

相关内容

  • 没有找到相关文章

最新更新