2013-12-21 2 views
9

Я использую весенний ботинок, поскольку он удаляет все скучные вещи, и давайте сосредоточимся на моем коде, но все тестовые примеры используют junit, и я хочу использовать огурец?Любой весенний ботинок работает с огурцом-jvm?

Может ли кто-нибудь указать мне в правильном направлении, чтобы получить огурец и весну, чтобы начать все, сделать все автоконфигурацию и проводку и позволить моим определениям шагов использовать автоматические проводные бобы, чтобы делать вещи?

ответ

17

Попробуйте использовать следующее на своем классе определение шага:

@ContextConfiguration(classes = YourBootApplication.class, 
         loader = SpringApplicationContextLoader.class) 
@RunWith(SpringJUnit4ClassRunner.class) 
public class MySteps { 
    //... 
} 

Также убедитесь, что у вас есть модуль огурца пружины на вашем пути к классам.

+0

Это полностью сработало для меня, спасибо вам большое. –

+0

@PedroLopez Может ли это найти файлы истории? На моей сборке истории не исполняются. Проблема заключается в том, что вы используете Cucumber.class в качестве бегуна, истории найдены, но tomcat не является пустым, если вы используете SpringJUnit4ClassRunner, а tomcat ist startet, но истории не выполняются. Существует открытое расширение: https://github.com/spring-projects/spring-boot/issues/2525 У вас нет этой проблемы? – FunThomas424242

+0

Бегун из огурца должен использоваться в другом классе (по сути, в вашем классе Runner), это для вашего определения шага. Единственное, что нужно для аннотирования этого класса с @Ignore, чтобы он не запускался как единичный тест, при запуске всего тестового набора. Надеюсь это поможет. –

2

Jake - мой последний код имел следующие аннотации в суперклассе, который был расширен каждый класс определения шага огурца. Это дает доступ к веб-маскам, добавляет в различные области для тестирования и загрузочные файлы. Весна загружается только один раз.

@ContextConfiguration(classes = {MySpringConfiguration.class}, loader = SpringApplicationContextLoader.class) 
@WebAppConfiguration 
@TestExecutionListeners({WebContextTestExecutionListener.class,ServletTestExecutionListener.class}) 

где WebContextTestExecutionListener является:

public class WebContextTestExecutionListener extends 
     AbstractTestExecutionListener { 

    @Override 
    public void prepareTestInstance(TestContext testContext) throws Exception { 

     if (testContext.getApplicationContext() instanceof GenericApplicationContext) { 
      GenericApplicationContext context = (GenericApplicationContext) testContext.getApplicationContext(); 
      ConfigurableListableBeanFactory beanFactory = context 
        .getBeanFactory(); 
      Scope requestScope = new RequestScope(); 
      beanFactory.registerScope("request", requestScope); 
      Scope sessionScope = new SessionScope(); 
      beanFactory.registerScope("session", sessionScope); 
     } 
    } 
} 
+1

Эй, извините, мне потребовалось столько времени, чтобы вернуться к вам. Я поднял слишком много репутации, и я не смог опубликовать его.Я смог заставить его работать в примерном проекте без TestExecutionListeners, но у меня возникла проблема в моем основном проекте вокруг @EnableAutoConfiguration (exclude = {RabbitAutoConfiguration.class}), который кажется несвязанным. Спасибо за всю помощь. – jakehschwartz

+1

Действительно полезно - спасибо! – declension

0

Благодаря @PaulNUK, я нашел множество аннотаций, которые будут работать.

Я отправил ответ на мой вопрос here

Мой StepDefs класс требуется аннотаций: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = DemoApplication.class, loader = SpringApplicationContextLoader.class) @WebAppConfiguration @IntegrationTest

Существует также хранилище с исходным кодом в ответ я связан.

1

Мой подход довольно прост. В крюке Beforeenv.groovy, когда я использую Cucumber-JVM для Groovy), выполните следующие действия.

package com.example.hooks 

import static cucumber.api.groovy.Hooks.Before 
import static org.springframework.boot.SpringApplication.exit 
import static org.springframework.boot.SpringApplication.run 

def context 

Before { 
    if (!context) { 
     context = run Application 

     context.addShutdownHook { 
      exit context 
     } 
    } 
} 
Смежные вопросы