从弹簧配置中初始化或将字符串注入静态字段 beforeClass (JUNIT) 的优雅方法?

Posted

技术标签:

【中文标题】从弹簧配置中初始化或将字符串注入静态字段 beforeClass (JUNIT) 的优雅方法?【英文标题】:Elegant way to init or inject string into a static field beforeClass (JUNIT) from spring configuration? 【发布时间】:2017-07-17 22:56:05 【问题描述】:

如果您想将数据注入 静态字段,注释 @Value("$my.field") 可以很好地工作。

就我而言,我正在为我的 Spring Boot 应用程序构建测试。我正在使用Junit。我有一些任务要做 @BeforeClass,我需要一些来自 spring 应用程序配置的属性。我正在寻找一种优雅的方式来获取我的属性。

【问题讨论】:

您可以在测试类中自动装配环境并从 env.getproperty("propertyname") 获取属性 **@Autowired Environment 环境 ** 不是静态的。在@beforeClass(静态方法)中,我不能使用“环境”。 您能否分享一下您正在尝试的内容。如果您希望在测试类中加载某些属性,您可以@Autowired Environment 环境并使用@PostConstruct 方法来初始化所需的属性。 【参考方案1】:

您可以自行在静态设置方法中加载属性文件并选择测试所需的值。对于某些人来说,它可能不如使用 @Value 注入方便,但它会成功。

public class SomeTestClass 

    private static String myProperty;

    @BeforeClass
    public static void setUpClass() throws Exception 
        Properties prop = new Properties();
        prop.load(new FileInputStream("src/main/resources/application.properties"));
        myProperty = prop.getProperty("your.property.key");
    

    @Test
    public void shouldLoadProperty() throws Exception 
        assertEquals("expectedValue", myProperty);
    


【讨论】:

以上是关于从弹簧配置中初始化或将字符串注入静态字段 beforeClass (JUNIT) 的优雅方法?的主要内容,如果未能解决你的问题,请参考以下文章

spring 读取配置文件,将值注入到静态字段

spring 项目中在类中注入静态字段

使用构造函数注入的弹簧@RestController中的空异常@Service

在身体异常弹簧休息中添加新字段

模拟中的弹簧值注入

Spring之Bean定义继承和依赖注入