Java Spring - 如何通过@WithUserDetails 使用来自application.properties 的值

Posted

技术标签:

【中文标题】Java Spring - 如何通过@WithUserDetails 使用来自application.properties 的值【英文标题】:Java Spring - How to use value from application.properties with @WithUserDetails 【发布时间】:2019-06-30 18:15:11 【问题描述】:

我想为我的测试使用application.properties 中的值和@WithUserDetails() 注释。

我当前的代码:

@Value("$user.admin")
private String ADMIN;

@Test
@WithUserDetails(ADMIN)
public void foo()  

显示错误“属性值必须是常量”

我正在将junit4与spring runner一起使用

【问题讨论】:

@Deadpool 这似乎只是将字符串 $user.admin 作为值传递,而不是从 application.properties 获取值 尝试将变量设为静态变量。示例:私有静态最终字符串 ADMIN; @Clover nope 不起作用,谢谢朋友! 好吧,你不应该用大写字母写简单的成员变量,因为这通常只用于常量。 ADMIN 不是常量,这是你的问题(Java 注释只接受常量作为参数,即字符串文字或 static final 以字符串文字作为值的成员)。 【参考方案1】:

似乎无法做到这一点,Java 编译器不允许这样做,因为它不会将来自 @Value() 的值视为编译时的常量。

【讨论】:

【参考方案2】:

java 内置了读取 .properties 文件的功能,而 JUnit 内置了在执行测试套件之前运行设置代码的功能。

java读取属性:

Properties p = new Properties();
p.load(new FileReader(new File("application.properties")));

junit startup documentation

把这两个放在一起,你应该有你需要的东西。

但是,最低要求是您的 test->resources 包中也有 application.properties 文件。

【讨论】:

以上是关于Java Spring - 如何通过@WithUserDetails 使用来自application.properties 的值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Spring + EasyMock做Java单元测试

如何使用 SockJs 通过 STOMP Java 客户端验证 Spring 非 Web Websocket?

Spring学习系列 通过Java代码装配Bean

Spring和Spring Boot的属性

Spring中如何混用XML与Java装配方式

如何在Controller Java Spring中使用不同的GET方法