Интеграция Springboot / Cucumber - Как использовать @Autowired (или другие теги SB) внутри класса определения шага? - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь создать среду автоматизации Springboot, cucumber и Junit4.Я использовал следующие версии:

  • Springboot: 2.1.3
  • огурец: io.cucumber 4.2.3
  • Junit4: 4.12
  • Операционная система: Win7 Pro.

Я создал класс prop, который пытается получить свойства из файла свойств (.yml)

Класс Prop:

@Data
@Component
public class PropsConfig {
    @Value("${spring.skyewss}")
    public String url;
}

Степень защиты:

public class SkyeWssLoginStepDef implements En {

    private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());

    private WebDriver driver;
    private SkyeWssLoginPage loginPage;
    private SkyeWssUtil skyeWssUtil;
    @Autowired
    private PropsConfig propsConfig;

    public SkyeWssLoginStepDef() {


        Given("^I open Skye WSS web page$", () -> {
            driver = CukeHook.driver;
            loginPage = new SkyeWssLoginPage(driver);
            driver.get(propsConfig.getUrl());
            skyeWssUtil = new SkyeWssUtil();
            LOGGER.info("Current page is " + driver.getTitle());
        });
       }
       ......
     }

Класс бегуна огурца:

@RunWith(Cucumber.class)
@CucumberOptions(
        features = {"src/test/resources/features"},
        plugin = {"pretty", "html:target/cucumber-html-report"},
        tags = {"@SkyeWss"}
)
@SpringBootTest
public class WssRegApplicationTests {

}

Я пытался присвоить теги классам stepdef, но безуспешно.Когда я даю теги классов stepdef, такие как @Component или @SrpingBootTest, я получаю ошибку.

cucumber.runtime.CucumberException: склеивать класс com.flexicards.wss_reg.skye.step.SkyeWssLoginStepDef и класс com.flexicards.wss_reg.skye.step.SkyeWssDashboardValStepDef обе пытаются настроить контекст Spring.Убедитесь, что только один класс клея настраивает контекст пружины


cucumber.runtime.CucumberException: класс клея com.flexicards.wss_reg.skye.step.SkyeWssDashboardValStepDef был аннотирован @Component;помечая его как кандидата на автоопределение Spring.Классы клея обнаруживаются и регистрируются огурцом.Автоматическое определение классов клея пружиной может привести к дублированию определений бобов.Удалите аннотацию @Component

Я новичок в Spring и Springboot, я почти уверен, что где-то неправильно настроил.Большинство примеров для Springboot и огурцов там устарели.Я уже пробовал их.Как создать абстрактные классы, которые расширяются всеми классами stepdefs.Это даст мне ту же ошибку, что и @SpringBootTest one.

Может кто-нибудь помочь мне в этом?Любые входы приветствуются.Большое спасибо.

1 Ответ

0 голосов
/ 25 февраля 2019

Похоже, вы сделали почти все правильно.Единственное, что неуместно - это местоположение вашей контекстной конфигурации.Он должен быть в файле с определением шага или хука.В противном случае огурец не обнаружит его.Это должно сработать:

@SpringBootTest
@AutoConfigureMockMvc
public class CucumberContextConfiguration  {

    @Before
    public void setup_cucumber_spring_context(){
        // Dummy method so cucumber will recognize this class as glue
        // and use its context configuration.
    }
} 

Вы можете найти рабочий пример cucumber-spring в репозитории github для огурцов .

Возможно, также стоит иметь в виду, что Cucumber реализует определения шагов в виде пружинных компонентов, а не послеобработанных классов модульных тестов, как вы могли ожидать.Это означает, что @MockBean, @SpyBean и друзья не будут работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...