Огурец: не удалось найти определение шага

У меня есть следующий файл функций: MacroValidation.feature

@macroFilter
Feature: Separating out errors and warnings
Scenario: No errors or warnings when separating out error list
    Given I have 0 macros
    When I filter out errors and warnings for Macros
    Then I need to have 0 errors
        And I need to have 0 warnings

Мои файлы определений.

package com.test.definition;

import cucumber.api.java.After;
import cucumber.api.java.Before;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import cucumber.runtime.java.StepDefAnnotation;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.powermock.api.mockito.PowerMockito.doReturn;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.spy;


@StepDefAnnotation
public class MacroValidationStepDefinitions {

private final MacroService macroService = spy(new MacroService());
private final LLRBusList busList = mock(LLRBusList.class);    
private final List<String> errorList = new ArrayList<String>();
private final List<String> warningList = new ArrayList<String>();

@Before({"@macroFilter"})
public void setUp() {
    errorList.addAll(Arrays.asList("error 1, error2, error 3"));
    warningList.addAll(Arrays.asList("warning 1, warning 2, warning 3"));
}

@After({"@macroFilter"})
public void tearDown() {
    errorList.clear();
    warningList.clear();
}

@Given("^I have (\\d+) macros$")
public void i_have_macros(int input) {
    doReturn(input).when(busList).size();
}

@When("^I filtered out errors and warnings for Macros$")
public void i_filtered_out_errors_and_warnings_for_Macros() {
    macroService.separateErrorsAndWarning(busList, errorList, warningList);
}

@Then("^I need to have (\\d+) errors$")
public void  i_need_to_have_errors(int numOfError) {
    if (numOfError == 0) {
        assertTrue(errorList.isEmpty());
    } else {
        assertEquals(errorList.size(), numOfError);
    }
}

@Then("^I need to have (\\d+) warnings$")
public void  i_need_to_have_warnings(int numOfWarnings) {
    if (numOfWarnings == 0) {
        assertTrue(warningList.isEmpty());
    } else {
        assertEquals(warningList.size(), numOfWarnings);
    }
}
}

Мой модульный тестовый класс.

@CucumberOptions(features = {"classpath:testfiles/MacroValidation.feature"},
                 glue = {"com.macro.definition"},
                 dryRun = false, 
                 monochrome = true,
                 tags = "@macroFilter"
                 )
@RunWith(Cucumber.class)
public class PageMacroValidationTest {
}

Когда я выполняю тест, я получаю в журнале предупреждение о том, что определение файла не реализовано.

Пример журнала:

You can implement missing steps with the snippets below:

@Given("^I have (\\d+) macros$")
public void i_have_macros(int arg1) throws Throwable {
    // Write code here that turns the phrase above into concrete actions
    throw new PendingException();
}

@When("^I filter out errors and warnings for Macros$")
public void i_filter_out_errors_and_warnings_for_Macros() throws Throwable {
    // Write code here that turns the phrase above into concrete actions
    throw new PendingException();
}

@Then("^I need to have (\\d+) errors$")
public void i_need_to_have_errors(int arg1) throws Throwable {
    // Write code here that turns the phrase above into concrete actions
    throw new PendingException();
}

@Then("^I need to have (\\d+) warnings$")
public void i_need_to_have_warnings(int arg1) throws Throwable {
    // Write code here that turns the phrase above into concrete actions
    throw new PendingException();
}

Я не думаю, что имя файла должно иметь значение, верно?


person Chun ping Wang    schedule 18.06.2014    source источник
comment
stackoverflow.com/questions/21753267/   -  person Bala    schedule 19.06.2014


Ответы (3)


Похоже, Cucumber не находит ваш класс определения шага. В своем классе модульного тестирования вы говорите:

 glue = {"com.macro.definition"}

Однако классы определения шага находятся в com.test.definition

Попробуйте изменить эту строку на:

 glue = {"com.test.definition"}

Возможно, вам придется перестроить проект, чтобы применить изменения.

person Matt Watson    schedule 19.06.2014

Кроме того, Cucumber чувствителен к пустому пространству. Если вы попытаетесь сделать свою бегущую строку или файл функции красивым после захвата фрагментов, вы столкнетесь с этой проблемой.

Вот пример, который сводил меня с ума на несколько часов при создании моего первого BDD. Я создал файл функций и скелетный бегун, который я запустил и захватил фрагменты. Затем я префиксировал файл функций, и когда я запустил бегун, он получил ошибки.

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

//  @Then("^the test result is = \"([^\"]*)\"$")
//  public void theTestResultIs(String ruleResult) throws Throwable {
    @Then("^the test result is         = \"([^\"]*)\"$")
    public void theTestResultIs(String arg1) throws Throwable {

Дох!

person JeffInTampa    schedule 05.04.2017

Попробуйте использовать все зависимости в POM.xml с идентификатором группы io.cucumber, который является последним jar-файлом, а не info.cukes. После удаления банок обновите проект новыми импортами и запустите проект.

Помните, что вы должны заменить все зависимости info.cukes на io.cucumber.

person Nishank Bharil    schedule 10.03.2020