Hi Jason,
The idea is to enable Cucumber in TestControl based tests and not in current Deltaspike tests. Currently we cannot (let me know if there is a way) run a TestControl test and use cucumber at the same time because both have its own runners, right? 2015-10-05 17:10 GMT-03:00 Jason Porter <[email protected]>: > While I like cucumber and I think it does a good job at helping tests be > easy to read, I think we'd need a compelling reason to start using it / > migrating tests. > > On Mon, Oct 5, 2015 at 2:06 PM, Rafael Pestano <[email protected]> > wrote: > > > Hi guys, > > > > I recently made a small PoC in TestControl module to enable cucumber > tests > > using deltapike, here's an example: > > > > > > @RunWith(CdiTestRunner.class) > > @CucumberOptions( > > features = "src/test/resources/features/uc014.feature" > > ) > > public class CucumberCDITest > > { > > > > > > @Test > > public void fakeIt() //needed by junit runner > > { > > > > } > > > > > > } > > > > > > uc014.feature > > > > Feature: ApplicationScoped bean test > > As a user of DeltaSpike Test Control module > > I want to inject application scoped beans > > So that I can test application scoped beans > > > > > > Scenario Outline: bean increment > > Given test bean value is set to <value> > > When bean value is incremented by 2 > > Then bean value should be <result> > > > > Examples: examples1 > > | value | result | > > | 1 | 3 | > > | 0 | 2 | > > | 10 | 12 | > > > > > > public class Uc014Steps > > < > > > https://github.com/rmpestano/deltaspike/blob/master/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc014/Uc014Steps.java > > > > > { > > > > @Inject > > private ApplicationScopedTestBean testBean; > > > > @Inject > > private ApplicationScopedTestBeanClient testBeanClient; > > > > > > @Given("^test bean value is set to (\\d+)$") > > public void initBeanValue(int value) { > > this.testBean.setValue(value); > > } > > > > @When("^bean value is incremented by (\\d+)$") > > public void incrementBeanValue(int amount) { > > this.testBeanClient.increment(amount);//will increment bean value > > } > > > > @Then("^bean value should be (\\d+)$") > > public void checkBeanValue(int result) { > > Assert.assertEquals(result, this.testBean.getValue()); > > } > > > > @After > > public void finalCheck() { > > int value = > > > > > BeanProvider.getContextualReference(ApplicationScopedTestBean.class).getValue(); > > int nextValue = > > > > > BeanProvider.getContextualReference(ApplicationScopedTestBeanClient.class).getNextValue(); > > > > if (value == 0) > > { > > throw new IllegalStateException("new application-scoped bean > > instance was created"); > > } > > > > if (nextValue == 1) > > { > > throw new IllegalStateException("new application-scoped bean > > instance was created"); > > } > > } > > > > > > } > > > > It is working here: https://github.com/rmpestano/deltaspike > > <https://github.com/rmpestano/deltaspike> and the changes I've made are > > in this > > commit > > < > > > https://github.com/rmpestano/deltaspike/commit/53a91c4a592afb084c42df6ff023bfc4f1b325f8 > > > > > . > > > > > > I did not created another runner, for simplicity i'm running cucumber > > inside CdiTestRunner, here's relevant bits: > > > > @Override > > public void run(RunNotifier runNotifier){ > > > > if > > > (getTestClass().getJavaClass().isAnnotationPresent(CucumberOptions.class)) > > { > > > > testContext.runCucumber(runNotifier,getTestClass()); > > > > } > > > > else > > > > { > > super.run(runNotifier); > > } > > > > public void runCucumber(RunNotifier runNotifier, TestClass testClass) > > throws IOException, InitializationError > > { > > applyBeforeClassConfig(testClass.getJavaClass()); > > new Cucumber(testClass.getJavaClass()).run(runNotifier); > > applyAfterClassConfig(); > > } > > > > > > I also needed to create an object factory > > < > > > https://github.com/rmpestano/deltaspike/blob/master/deltaspike/modules/test-control/impl/src/main/java/cucumber/runtime/CucumberObjectFactory.java > > > > > in order to make step definitions (like Uc014Steps) CDI beans. This > factory > > must be in package 'cucumber.runtime' otherwise Cucumber wont use it (I > > think there is way to make cucumber load it from other packages but we > need > > to create a cucumber backend for it) > > > > > > > > > > Do you think this could be incorporated in Test Control module? > > > > > > If you have interest I think we need to create a separated runner and > then > > we can get ride of the > > > > @Test > > public void fakeIt() //needed by junit runner > > { > > > > } > > > > without the fake test junit runner will complain cause there is no test > > method. > > > > > > OBS: > > I needed to declare sure-fire plugin to use a newer version > > I had to upgrade junit to 4.11 because cucumber-junit depends on it > > > > -- > > <http://www.advancedit.com.br/>Att, > > > > Rafael M. Pestano > > > > Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul > > http://rpestano.wordpress.com/ > > @realpestano <https://twitter.com/realpestano> > > > > > > -- > Jason Porter > http://en.gravatar.com/lightguardjp > -- <http://www.advancedit.com.br/>Att, Rafael M. Pestano Desenvolvedor Java Cia. de Processamento de Dados do Rio Grande do Sul http://rpestano.wordpress.com/ @realpestano <https://twitter.com/realpestano>
