我有以下测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@TestPropertySource(value = "classpath:testApplication.properties")
public class ESJavaAPITests {
@Resource
private Environment environment;
private final String CLUSTER_NAME = environment.getProperty("ES.cluster.name");
}
属性位于测试/Java/resources/testapplication.properties
中,看起来如下:
ES.host = localhost
ES.port = 9300
ES.cluster.name = 2m3d
但是,我一直得到NullPointerException
第25行,这正是具有cluster_name
初始化的行:
Java.lang.NullPointerException位于com.example.estrans.esjavaapitests.(esjavaapitests.Java:25)位于sun.reflect.nativeConstructorAccessorImpl.newInstance0(原生方法)位于sun.reflect.nativeConstructorAccessorImpl.newInstance(原生方法)位于sun.reflect.nativeConstructorAccessorImpl.newInstance(原生方法)位于sun.reflect.nativeConstructorAccessorImpl.newInstance(RingJunit4ClassRunner.RunChild(SpringJunit4ClassRunner.:247)在org.springFramework.test.context.junit4.SpringJunit4ClassRunner.Runchild(SpringJunit4ClassRunner.Runner.:94)在org.junit.runners.ParentRunner$3。Run(ParentRunner.Java:290)在org.junit.runners.ParentRunner$1。Schedule(ParentRunner.Java:71)在nit4.junit4ideatestrunner.startrunnerWithargs(junit4ideatestrunner.:117)在com.intellij.rt.execution.junit.junitstarter.preparestreamsandstart(junitstarter.Java:234)在com.intellij.rt.execution.junit.junit.junit.main(junitstarter.Java:74)在com.intellij.rt.execution.junit.junit.main(junitstarter.Java:74)在
为什么是NPE?
您得到一个NPE,因为在cluster_name
字段初始化时,环境为null
,因为spring还没有时间自动连接类-cluster_name
是在创建测试类实例时初始化的。您应该改用@value(“${es.cluster.name}”)
:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@TestPropertySource(value = "classpath:testApplication.properties")
public class ESJavaAPITests {
@Value("${ES.cluster.name}")
private String CLUSTER_NAME;
}
我正在为我的Spring启动应用程序编写联调,但当我尝试使用@TestProperty tySource覆盖一些属性时,它正在加载上下文xml中定义的属性文件,但不会覆盖注释中定义的属性。
我想知道是否有什么方法可以使属性值动态。类似于这样: 感谢您的反馈。在我的例子中,属性值是系统特定的,应该在测试运行时生成。
问题内容: 我为该标题表示歉意。我找不到更好的方法来解释这种情况。 我使用URL http://www.exampledepot.com/egs/java.util/Props.html中所述的Property类加载属性文件。 我的问题是我可以在该属性文件中使用属性吗? 例: test.properties 其他语法有可能吗? 谢谢 问题答案: 以前从未见过。您当然 可以 制作自己的预处理器。只要
Spring Boot 2.0.3.发布 然而,我需要两个属性文件,我确实看到了位置选项,但没有看到一个以上的文件的例子…尝试了不同的选择,但都不起作用: 我尝试了几种方法,甚至尝试了两次使用@TestPropertySource,但错误地说你不能使用它两次。 尝试使用@PropertySource,因为你可以使用它两次,但没有工作,因为这是一个Junit测试。看了一堆关于stacktrace+其
问题内容: hibernate中的property标签的lazy属性允许按照以下链接延迟加载属性:http : //docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping- declaration -属性 lazy(可选-默认为false):指定在首次访问实例变量时应延迟获取此属性。它需要构建时字节码检测
问题内容: 我已经看到过这种表示法使用了很多东西,我想知道,这两种表示法之间有什么显着区别吗? 和 我一直都在使用,因为我觉得它看上去更干净,但是我不太确定浏览器的解释是否不同于。 有谁知道哪个更好或更正确? 问题答案: 当单位为时,虽然单位是可选的,但我倾向于将其保留,因为然后我可以使用Chrome的开发者工具通过点击值并按向上/向下箭头键来调整值。没有单位,这实际上是不可能的。 此外,CSS缩