当前位置: 首页 > 知识库问答 >
问题:

使用@TestPropertySource属性中的属性将导致NullPointerException

薛枫
2023-03-14

我有以下测试:

@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?

共有1个答案

邢星波
2023-03-14

您得到一个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缩