Java 可以通过JUNIT测试属性注入的正确性吗?
我已经开发了我的应用程序,我有一个.properties文件,其中包含几个键值属性。 在我的代码中,我注入了如下属性:Java 可以通过JUNIT测试属性注入的正确性吗?,java,spring,spring-boot,junit,Java,Spring,Spring Boot,Junit,我已经开发了我的应用程序,我有一个.properties文件,其中包含几个键值属性。 在我的代码中,我注入了如下属性: @Value("${services.host}${services.name}") private String hostname; 我正在寻找一种方法来检查代码中的每个@值,以确保在运行时解决每个属性。类似于模拟我的应用程序启动 有可能吗?是的,您可以创建一个JUnit测试类来加载您的应用程序上下文(就像生产代码一样),然后执行一个测试方法来验证您的属性值是否已被注入 @
@Value("${services.host}${services.name}")
private String hostname;
我正在寻找一种方法来检查代码中的每个@值,以确保在运行时解决每个属性。类似于模拟我的应用程序启动
有可能吗?是的,您可以创建一个JUnit测试类来加载您的应用程序上下文(就像生产代码一样),然后执行一个测试方法来验证您的属性值是否已被注入
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppConfig.class})
public class SpringApplicationTest {
@Autowired
private MyServiceBean serviceBean;
@Test
public void shouldExecuteServiceBean_andProduceExpectedOutcome() {
//TODO test setup
serviceBean.doSomething()
//TODO assert output
}
}
在本例中,MyServiceBean.java
是一个将从Main
类执行的类,因此您正在测试应用程序的端到端逻辑,包括所有spring依赖注入。将其视为您的“快乐之路”测试场景。我总是在我的项目中包括至少一个这样的测试,以确保所有的弹簧注入都是正确的,并且负载没有错误。您不希望在构建和部署代码之前捕获错误
在上面的示例中,AppConfig.java
与部署代码时使用的Spring配置类相同。您可能希望添加另一个配置类,该类专门为测试重写某些属性/bean
@ContextConfiguration(classes = {AppConfig.class, TestConfig.class})
使用仅测试类,您可以模拟使测试变得困难的任何依赖项(即使用),还可以覆盖属性,以便您可以针对“localhost”而不是另一个可能可用或不可用的服务进行测试(只要您可以在测试设置中创建等效的localhost服务)
注意:如果您发现由于太多依赖项或无法轻松替换的外部依赖项而难以测试应用程序,那么您所感受到的痛苦是开始考虑如何更改架构以支持轻松测试的一个很好的指南。您也可以使用上述概念测试应用程序的某些部分。您是否检查了
spring boot starter test
out?但是,为什么您希望unittest spring framework而不是业务逻辑对我来说是个谜