Приложение SpringBoot не может загрузить свойства теста

У меня возникают проблемы при загрузке свойств теста весенней загрузки. У меня есть файл application.properties, включенный в src / test / resources /, но когда я запускал тестовые примеры, он терпел неудачу, потому что не мог загрузить контекст приложения. Вот мой тестовый класс выглядит так

@SpringBootTest
@EmbeddedKafka(partitions = 1, controlledShutdown = true)
@Import(KafkaTestConfiguration.class)
@EnableAutoConfiguration(exclude = IntegrationAutoConfiguration.class)
public class DeadLetterPropertiesTest {

    @Autowired
    DeadLetterProperties deadLetterProperties;

    @Value("errorqueue")
    private String deadLetterQueueName;

    @Test
    public void queueNameTest() {
 assertEquals(deadLetterQueueName,deadLetterProperties.getQueueName());
}
}

Вот как выглядит stacktrace:

java.lang.NullPointerException  at 
com.test.DeadLetterPropertiesTest.queueNameTest(DeadLetterPropertiesTest.java:47)   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)   at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)   at 
java.lang.reflect.Method.invoke(Method.java:498)    at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)    at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)     at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)  at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)  at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)  at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)  at 
    org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)   at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)   at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)     at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)

person TechGeek    schedule 21.05.2020    source источник


Ответы (1)


Трассировка стека подтверждает, что во время теста создание контекста приложения не удается. Это может быть по нескольким причинам, одна из которых может быть не в состоянии читать значения из application.properties. В вашем коде есть несколько проблем, которые я заметил. В вашем коде вы можете удалить аннотацию @ContextConfiguration, если вы используете аннотацию @SpringBootTest в соответствии с документацией:

Spring Boot предоставляет аннотацию @SpringBootTest, которую можно использовать в качестве альтернативы стандартной аннотации Spring-test @ContextConfiguration, когда вам нужны функции Spring Boot. Аннотация работает путем создания ApplicationContext, используемого в ваших тестах, через SpringApplication.

  • Вместо этого вы можете предоставить вам макетные конфигурации bean-компонентов для своего теста, используя аннотацию @TestConfiguration. Вы также должны исключить обычные классы конфигурации, так как это приведет к конфликту, если вы предоставляете отдельную тестовую конфигурацию для тех же bean-компонентов.
  • Кроме того, если у вас есть application.properties с тестовыми значениями под src/test/resources, вам не нужно указывать путь с помощью @TestPropertySource, поскольку файл будет автоматически загружен Springboot во время теста.
  • Также не используйте аннотации @SpringBootTest и @RunWith(SpringRunner.class) вместе. Это разные аннотации для разных случаев использования. Если вы не понимаете, что использовать при использовании ссылки

Официальный документ

Для дальнейшего анализа исправьте код, затем запустите его снова, и если ошибка не исчезнет, ​​поделитесь полной трассировкой стека.

person Ananthapadmanabhan    schedule 21.05.2020
comment
Я обновил сообщение с новыми внесенными мною изменениями. Теперь я получаю исключение нулевого указателя. - person TechGeek; 21.05.2020
comment
@TechGeek, вы получаете исключение нулевого указателя на DeadLetterPropertiesTest.java:47, которое является deadLetterProperties.getQueueName() методом получения. что означает, что получатель возвращает null. Не могли бы вы поделиться кодом класса, чтобы мы могли больше анализировать. - person Ananthapadmanabhan; 22.05.2020