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

Reply via email to