Hi guys,

I've pushed the cucumber runner for deltaspike here:
https://github.com/rmpestano/deltaspike/blob/master/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/cucumber/CdiCucumberTestRunner.java


I have implemented some simple tests here:
https://github.com/rmpestano/deltaspike/tree/master/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc014

Things to note:

- With a dedicated runner there is no need to create a fake @Test I
commented in this thread;
- CDI container is started for every feature. See this step
<https://github.com/rmpestano/deltaspike/blob/master/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc014/feature/multiscenario/AppScopeBeanSteps2.java#L41>
which uses the same bean in different features
<https://github.com/rmpestano/deltaspike/blob/master/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc014/feature/multiscenario/AppScopeBeanFeatureTest.java#L38>
;
- CDI container is reused across scenarios see this step;
<https://github.com/rmpestano/deltaspike/blob/master/deltaspike/modules/test-control/impl/src/test/java/org/apache/deltaspike/test/testcontrol/uc014/feature/multiscenario/AppScopeBeanSteps.java#L65>
- I have duplicated a lot of code from CdiTestRunner, if this solution is
going to be accepted we need to make some refactory
- Didn't implemented @Suite of features


WDYT?

2015-10-05 22:44 GMT-03:00 Rafael Pestano <[email protected]>:

> Hi Daniel,
>
> Yes, I also think a dedicated runner is the best approach, I'll work on it
> during the week and let you know when I have some progress and/or issues ;)
>
>
>
> 2015-10-05 21:38 GMT-03:00 Daniel Cunha <[email protected]>:
>
>> @Rafael,
>>
>> I didn't like your idea to change CdiTestRunner.
>> Do we can change API to extend it and create another runner with
>> Cumcumber?
>> (Something like: CdiCumcumberTestRunner)
>>
>> Please, open a discuss in dev's mail list[1] about it. It seem cool
>> feature.
>>
>> Thank you!
>>
>> [1] http://deltaspike.apache.org/community.html#Mailinglists
>>
>>
>> On Mon, Oct 5, 2015 at 5:17 PM, Jason Porter <[email protected]>
>> wrote:
>>
>> > Ah, I see. No, there is no way to do that, JUnit only allows one runner.
>> >
>> > On Mon, Oct 5, 2015 at 2:14 PM, Rafael Pestano <[email protected]>
>> > wrote:
>> >
>> > > 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>
>> > >
>> >
>> >
>> >
>> > --
>> > Jason Porter
>> > http://en.gravatar.com/lightguardjp
>> >
>>
>>
>>
>> --
>> Daniel Cunha (soro)
>> https://twitter.com/dvlc_
>> http://www.tomitribe.com
>>
>
>
>
> --
> <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>
>



-- 
<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>

Reply via email to