gpt4 book ai didi

java - Spring jUnit 测试属性文件

转载 作者:IT老高 更新时间:2023-10-28 13:52:20 31 4
gpt4 key购买 nike

我有一个 jUnit 测试,它有自己的属性文件(application-test.properties)和它的 spring 配置文件(application-core-test.xml)。

其中一种方法使用由 spring config 实例化的对象,即 spring 组件。类中的成员之一从我们的主要属性文件 application.properties 派生其值。通过 jUnit 访问此值时,它始终为空。我什至尝试将属性文件更改为指向实际的属性文件,但这似乎不起作用。

这是我访问属性文件对象的方式

@Component
@PropertySource("classpath:application.properties")
public abstract class A {

@Value("${test.value}")
public String value;

public A(){
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}

public A(String text) {
this();
// do something with text and value.. here is where I run into NPE
}

}

public class B extends A {
//addtnl code

private B() {

}


private B(String text) {
super(text)
}
}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:META-INF/spring/application-core-test.xml",
"classpath:META-INF/spring/application-schedule-test.xml"})
@PropertySource("classpath:application-test.properties")
public class TestD {

@Value("${value.works}")
public String valueWorks;

@Test
public void testBlah() {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
B b= new B("blah");
//...addtnl code

}
}

最佳答案

首先,@PropertySource 中的 application.properties 应该读取 application-test.properties 如果这是文件的名称(匹配这些东西很重要):

@PropertySource("classpath:application-test.properties ")

该文件应该在您的 /src/test/resources 类路径下(在根目录下)。

我不明白您为什么要将依赖项硬编码到名为 application-test.properties 的文件中。那个组件只能在测试环境中使用吗?

通常的做法是在不同的类路径上拥有同名的属性文件。您加载一个或另一个取决于您是否正在运行测试。

在典型布局的应用程序中,您将拥有:

src/test/resources/application.properties

src/main/resources/application.properties

然后像这样注入(inject)它:

@PropertySource("classpath:application.properties")

更好的做法是在你的 spring 上下文中将该属性文件作为一个 bean 公开,然后将该 bean 注入(inject)到任何需要它的组件中。这样,您的代码就不会被对 application.properties 的引用所困扰,并且您可以使用任何您想要的东西作为属性的来源。这是一个例子:how to read properties file in spring project?

关于java - Spring jUnit 测试属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32974432/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com