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单元测试