java - 使用spring条件bean时如何指定单元测试

标签 java unit-testing spring-boot junit4

我创建了一个 Spring Boot 项目,在其中定义了一些条件 bean,它们使用 ConditionalOnProperty 注释。因此,根据我的属性文件设置,将创建一些bean,而另一些则不会(因为我有一些后端用于一件事,所以可以在属性文件中设置以在生产情况下选择一个)。

但是我为所有 bean 编写了单元测试,因此单元测试不会成功,因为在某些情况下,某些 bean 根本不会创建,并且我将得到 UnsatisfiedDependencyException。

有什么方法可以让我只能测试创建的bean,我尝试在单元测试方法上添加ConditionalOnProperty注释,但它不起作用,因为它是关于bean注册的。

如果没有什么好的解决方案,我会将项目拆分为每个后端的一些库,但这只是一个小项目。

最佳答案

好吧,终于找到方法了。

在我的测试用例中,我使用 Autowired 注释,首先,我应该添加

 required = false 
Autowired 的参数,所以当 由于不满足 ConditionOnProperty,所​​以未创建 bean,不会抛出 NoSuchBeanException,并且该字段保持 null。

其次,我应该使用JUnit的Assume类来检查条件是否满足,如果不满足条件,则忽略大小写。

因为我的条件是属性文件中的值,所以我读取它并使用它来提供 ShouldTrue 方法。

也许还有另一种更好的方法,但它对我有用。

关于java - 使用spring条件bean时如何指定单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50315579/

相关文章:

java - Selenium By.xpath、By.linkName 以前可以工作,现在不再工作了

python-2.7 - 断言已使用特定字符串调用了日志记录

unit-testing - 在谈论单元测试时 “DAMP not DRY” 是什么意思?

java - 在我的情况下,BindingResult 或 FieldErrors 或 GlobalErrors 可以为 null 吗?

java - Spring boot 在 servlet 上下文之外获取应用程序基础 url

java - 在 Spring bean 中启动新事务

java - 如何在java中生成20到100之间5个随机数的列表

java - 读取Spring Validator类中属性文件的内容

angularjs - 如何测试具有类继承的 Angular 应用程序?

spring - 将 @Profile 注释与属性占位符值一起使用