2014-06-18 17 views
5

ho il seguente file funzione: MacroValidation.featureCetriolo: Impossibile trovare definizione passo

@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 

I miei file di definizione.

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); 
    } 
} 
} 

La mia classe di test unità.

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

Quando eseguo il test, ottengo la definizione del file non implementata avvisi nel registro.

registro Esempio:

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(); 
} 

Non credo che il nome del file dovrebbe importare giusto?

+0

http://stackoverflow.com/questions/21753267/cucumber-jvm-undefined-step/21754450#21754450 – Bala

risposta

4

Sembra che Cucumber non stia cercando la classe di definizione del passo. Nella classe unit test che dici:

glue = {"com.macro.definition"} 

Tuttavia le classi di definizione fase sono in com.test.definition

provare a cambiare quella linea a:

glue = {"com.test.definition"} 

Potrebbe essere necessario ricostruire il progetto di far salire il cambiamento.

0

Inoltre, Cetriolo è sensibile allo spazio bianco. Se provi a rendere il tuo corridore o il tuo file di funzione piuttosto dopo aver catturato i frammenti, avrai questo problema.

Ecco un esempio che mi ha fatto impazzire per diverse ore durante la creazione del mio primo BDD. Avevo creato il file delle caratteristiche e uno skeleton runner che ho eseguito e catturato i frammenti. Poi ho ottimizzato il file delle caratteristiche e, quando ho corso, il corridore ha ottenuto gli errori.

Ovviamente tutto andava bene per il mio cervello umano, quindi le prossime ore sono state spese in ricerche infruttuose qui, e controllando le versioni e le liste di errori. Alla fine ho deciso di confrontare le prime due righe del frammento per vedere cosa era diverso:

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

Doh!

Problemi correlati