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

Reply via email to