Сбой интеграционных тестов SpringBoot с java.awt.HeadlessException

Обновления после обзора и предложения от @Bobernac Alexandru

Вопрос пополняется предложениями, можно просто использовать напрямую;)

У меня проблема при выполнении интеграционных тестов Springboot.

Мой тестовый класс

public class DepenseEndpointIT extends AbstractIT {

    private DonneesTestEndpointUtil donneeTest = new DonneesTestEndpointUtil();

    @Override
    @Before
    public void setUp() {
        System.setProperty("jwt", false)
        super.setUp();

    }

    @Test
    public void shouldReturnVentePrevHttpStatus200() throws Exception {
        String uri = "/agregats";
        MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri).params(params).accept(MediaType.APPLICATION_JSON_UTF8_VALUE)).andReturn();
        int status = mvcResult.getResponse().getStatus();
        String responseContent = mvcResult.getResponse().getContentAsString();
    }

}

AbstractIT выглядит так (я заменил для большей читабельности имена пакетов)

@RunWith(SpringRunner.class)
@SpringBootTest(classes = DepenseEndpoint.class,
                properties = {"spring.cloud.config.enabled=false", "spring.cloud.zookeeper.enabled=false", "spring.cloud.zookeeper.discovery.enabled"})
@EntityScan({"si.data.analytics.ven.history.entity", "si.data.analytics.ven.history.domain"})
@WebAppConfiguration
@ComponentScan(basePackages = {"si.data.analytics.ven"})
public abstract class AbstractIT {

    protected MockMvc mvc;

    @Autowired
    WebApplicationContext webApplicationContext;

    protected void setUp() {
        mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }
}

Когда я запускаю свои тесты, у меня появляется следующая ошибка: исключение выдается при выполнении mvn.perform(...)

org.springframework.web.util.NestedServletException: Ошибка обработки запроса; вложенное исключение - java.util.concurrent.ExecutionException: java.awt.HeadlessException

В моем main () я изменил способ запуска приложения, я установил для headless значение false, чтобы избежать ошибки, и он работает нормально, но мой интеграционный тест не работает:

Я что-то упустил? Есть ли способ передать один и тот же параметр, например: builder.headless(false), в тестовые классы?

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
@ComponentScan(basePackages = {"si.data.analytics.ven", "si.data.analytics.foundation.logging.aspect"})
@EnableAsync
@EnableDiscoveryClient
public class Main {
    public static void main(String[] args) {
        SpringApplicationBuilder builder = new SpringApplicationBuilder(Main.class);
        builder.headless(false).run(args);
    }
}

Заранее спасибо за помощь

Вы добавили @RunWith в оба класса. Удалите public class DepenseEndpointIT extends AbstractIT { private DonneesTestEndpointUtil donneeTest = new DonneesTestEndpointUtil(); @Override @Before public void setUp() { System.setProperty("jwt", false) super.setUp(); } @Test public void shouldReturnVentePrevHttpStatus200() throws Exception { String uri = "/agregats"; MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri).params(params).accept(MediaType.APPLICATION_JSON_UTF8_VALUE)).andReturn(); int status = mvcResult.getResponse().getStatus(); String responseContent = mvcResult.getResponse().getContentAsString(); } } из @RunWith(SpringRunner.class) @SpringBootTest(classes = DepenseEndpoint.class, properties = {"spring.cloud.config.enabled=false", "spring.cloud.zookeeper.enabled=false", "spring.cloud.zookeeper.discovery.enabled"}) @EntityScan({"si.data.analytics.ven.history.entity", "si.data.analytics.ven.history.domain"}) @WebAppConfiguration @ComponentScan(basePackages = {"si.data.analytics.ven"}) public abstract class AbstractIT { protected MockMvc mvc; @Autowired WebApplicationContext webApplicationContext; protected void setUp() { mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } } и добавьте его в mvn.perform(...), поскольку headless расширяет @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class}) @ComponentScan(basePackages = {"si.data.analytics.ven", "si.data.analytics.foundation.logging.aspect"}) @EnableAsync @EnableDiscoveryClient public class Main { public static void main(String[] args) { SpringApplicationBuilder builder = new SpringApplicationBuilder(Main.class); builder.headless(false).run(args); } } . Должно сработать.


person dnej    schedule 22.11.2019    source источник


Ответы (2)


Я нашел решение проблемы, установив @RunWith(SpringRunner.class) на DepenseEndpointIT

person Bobernac Alexandru    schedule 22.11.2019
comment
в org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:1013) в org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:897) в javax.servletervice.http. .java: 645) в org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:882) в org.springframework.test.web.servlet.TestDispatcherServlet.service (TestDispatcherServlet.javax.servlet) в. http.HttpServlet.service (HttpServlet.java:750) по адресу org.springframework.mock.web.MockFilterChain $ ServletFilterProxy.doFilter (MockFilterChain.java:166) по адресу org.springChain.java:166) по адресу org.springChain. 133) на org.springframework.test.web.servlet.MockMvc.perform (MockMvc.java:182) на com.snef.si.data.analytics.ven.integration.DepenseEndpointIT.shouldReturnVentePrevHttpStatus200 (DepenseEndpoint). .reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.Method. junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:50) в org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12) в org.junit.runners.modelhopse. (FrameworkMethod.java:47) на org.junit.internal.runners.statements.InvokeMethod.evaluate (InvokeMethod.java:17) на org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.RunBeforeTestExecutionCallbacks. ) на org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate (RunAfterTestExecutionCallbacks.java:84) на org.junit.internal.runners.statements.RunBefores.evaluates.frame.java:26 rk.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate (RunBeforeTestMethodCallbacks.java:75) в org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks. context.junit4.statements.SpringRepeat.evaluate (SpringRepeat.java:84) по адресу org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:325) по адресу org.springframework.test.context.junit4.SpringUnnerCloud. java: 251) в org.springframework.test.context.junit4. SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner.java:97) по адресу org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) по адресу org.junit.runners.ParentRunner $ 1.schedule.java. .runners.ParentRunner.runChildren (ParentRunner.java:288) в org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) в org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner) atjava или runners.ParentRunner.run (ParentRunner.java:363) по адресу org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run (SpringJUnit4ClassRunner.java:190) по адресу org.junit.runner.java:190) по адресу org.junit.runner.Java: в com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs (JUnit4IdeaTestR unner.java:68) в com.intellij.rt.execution.junit.IdeaTestRunner $ Repeater.startRunnerWithArgs (IdeaTestRunner.java:47) в com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAnditStart2 (JUnitStarter) at com.intellij.rt.execution.junit.JUnitStarter.main (JUnitStarter.java:70) Вызвано: java.util.concurrent.ExecutionException: java.awt.HeadlessException - person dnej; 22.11.2019

Я пробовал ваше решение, но у меня все еще та же ошибка

@Override
@Before
public void setUp() {
    System.setProperty("java.awt.headless", "false");
    super.setUp();
}
person dnej    schedule 22.11.2019