Использование свойства из свойств @TestPropertySource приводит к исключению NullPointerException

У меня есть следующий тест:

@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");
}

Недвижимость находится в test/java/resources/testApplication.properties и выглядит так:

ES.host = localhost
ES.port = 9300
ES.cluster.name = 2m3d

Однако я продолжаю получать NullPointerException строку 25, которая в точности совпадает с строкой с инициализацией CLUSTER_NAME:

Почему NPE?

Вы получаете NPE, потому что в момент инициализации вашего поля

@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");
}
среда test/java/resources/testApplication.properties, потому что у Spring еще не было времени для автоматической привязки класса -
ES.host = localhost
ES.port = 9300
ES.cluster.name = 2m3d
инициализируется при создании экземпляра тестового класса. Вместо этого вы должны использовать NullPointerException:


person mCs    schedule 28.08.2016    source источник
comment
java.lang.NullPointerException в com.example.estrans.ESJavaAPITests. (ESJavaAPITests.java:25) в sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) в sun.reflect.NativeConstructorAccessorImpl.nativeConstructor. .reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) в java.lang.reflect.Constructor.newInstance (Constructor.java:423) в org.junit.runners.BlockJUnit4ClassRunner. springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest (SpringJUnit4ClassRunner.java:227) в org.springframework.test.context.junit4.SpringJUnit4ClassRunner $ 1.runassmolective.junit4.SpringJUnit4ClassRunner $ 1. .ReflectiveCallable.run (ReflectiveCallable.java:12) в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock (SpringJUnit4ClassRunner.j ava: 289) в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner.java:247) в org.springframework.test.context.junit4.SpringJUnit4.JavaRunit4.SpringJUnit4. .runners.ParentRunner $ 3.run (ParentRunner.java:290) на org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) на org.junit.runners.ParentRunner.runChildren (ParentRunner) atjava:288 org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) по адресу org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:268) по адресу org.springframework.test.context.junit4.statements.Cloud. оценить (RunBeforeTestClassCallbacks.java:61) на org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate (RunAfterTestClassCallbacks.java:70) на org.junit.runners.Parent (org.Runner.Parent) (org.junit.runners.Parent) (org.Runner.runner) .springframework.test.context.junit4.SpringJUnit4ClassRunner.run (S pringJUnit4ClassRunner.java:191) по адресу org.junit.runner.JUnitCore.run (JUnitCore.java:137) по адресу com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs.jpg.jUnit: .JUnitStarter.prepareStreamsAndStart (JUnitStarter.java:234) в com.intellij.rt.execution.junit.JUnitStarter.main (JUnitStarter.java:74) в sun.reflect.NativeMethodAccessorImpl.invoke.AccessorImpl. .invoke (NativeMethodAccessorImpl.java:62) в sun.reflect. DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в com.intellij.rt.execution.application.AppMain.main (AppMain.java:144)   -  person Md. Nasir Uddin Bhuiyan    schedule 28.08.2016


Ответы (1)


Попробуйте @ Autowired вместо @ Resource

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@TestPropertySource(value = "classpath:testApplication.properties")
public class ESJavaAPITests {

    @Value("${ES.cluster.name}")
    private String CLUSTER_NAME;
}
person Miloš Milivojević    schedule 28.08.2016