You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@deltaspike.apache.org by Allen Cunningham <cu...@olsdallas.com> on 2014/12/05 21:25:53 UTC

Test-Control ProjectStage

I'm having trouble with the ProjectStage in Test-Control. My tests run with
ProjectStage.Production instead of UnitTest.

I put together a simple project to demonstrate my problem:

Test class:

@RunWith(CdiTestRunner.class)
@TestControl(startScopes = ApplicationScoped.class)
public class UnitTest {
  @Inject SampleClient sampleClient;

  @Test
  @TestControl(projectStage = ProjectStage.UnitTest.class)
  public void go() {
    sampleClient.init(new StartupEvent());
  }
}

SampleClient:

@ApplicationScoped
public class SampleClient {
  @Inject SampleAPI sampleAPI;

  public void init(@Observes @Any StartupEvent event) {
    System.out.println(sampleAPI.doSomething());
  }
}

The API:

public interface SampleAPI {
  public String doSomething();
}

The production implementation:

@ApplicationScoped
@Exclude(ifProjectStage = ProjectStage.UnitTest.class)
public class SampleImpl implements SampleAPI {

  @Override
  public String doSomething() {
    return "Greetings from Impl";
  }
}

And finally the mock bean:

@ApplicationScoped
@Exclude(exceptIfProjectStage = ProjectStage.UnitTest.class)
public class SampleMock implements SampleAPI {

  @Override
  public String doSomething() {
    return "Greetings from Mock";
  }
}

When I launch the app using CdiContainer, it loads the mock bean correctly,
but when I launch it using CdiTestRunner it loads SampleImpl.

Single stepping through OWB I see that the DeltaSpike ProjectStageProducer
sees projectStage == null and sets it to Production by default.

Am I missing something in my test config?

I put a zip of the project here:
https://www.dropbox.com/s/vg76rdapsl4yps9/ProjectStage.zip?dl=0
Sorry it isn't Maven!
"ant" will launch it normally and "ant test" will run the unit test.

Thanks!
Allen

Re: Test-Control ProjectStage

Posted by Allen Cunningham <cu...@olsdallas.com>.
Gerhard,

The only difference I could see in your template was the DeltaSpike
version. So I downloaded 1.2.0 and my tests work fine now.
If anyone else cares, I suspect ProjectStage has a problem in 1.0.3. We're
happy to use 1.2.0.

Allen

On Fri, Dec 5, 2014 at 5:27 PM, Gerhard Petracek <gerhard.petracek@gmail.com
> wrote:

> hi allen,
>
> the zip-file you provided contains a bit more.
> however, if i use the parts you described in your mail (with [1]),
> everything works as expected.
>
> regards,
> gerhard
>
> [1] https://github.com/os890/javase-cdi-ds-project-template
>
>
>
> http://www.irian.at
>
> Your JavaEE powerhouse -
> JavaEE Consulting, Development and
> Courses in English and German
>
> Professional Support for Apache
> MyFaces, DeltaSpike and OpenWebBeans
>
>
>
> 2014-12-05 21:25 GMT+01:00 Allen Cunningham <cu...@olsdallas.com>:
>
> > I'm having trouble with the ProjectStage in Test-Control. My tests run
> with
> > ProjectStage.Production instead of UnitTest.
> >
> > I put together a simple project to demonstrate my problem:
> >
> > Test class:
> >
> > @RunWith(CdiTestRunner.class)
> > @TestControl(startScopes = ApplicationScoped.class)
> > public class UnitTest {
> >   @Inject SampleClient sampleClient;
> >
> >   @Test
> >   @TestControl(projectStage = ProjectStage.UnitTest.class)
> >   public void go() {
> >     sampleClient.init(new StartupEvent());
> >   }
> > }
> >
> > SampleClient:
> >
> > @ApplicationScoped
> > public class SampleClient {
> >   @Inject SampleAPI sampleAPI;
> >
> >   public void init(@Observes @Any StartupEvent event) {
> >     System.out.println(sampleAPI.doSomething());
> >   }
> > }
> >
> > The API:
> >
> > public interface SampleAPI {
> >   public String doSomething();
> > }
> >
> > The production implementation:
> >
> > @ApplicationScoped
> > @Exclude(ifProjectStage = ProjectStage.UnitTest.class)
> > public class SampleImpl implements SampleAPI {
> >
> >   @Override
> >   public String doSomething() {
> >     return "Greetings from Impl";
> >   }
> > }
> >
> > And finally the mock bean:
> >
> > @ApplicationScoped
> > @Exclude(exceptIfProjectStage = ProjectStage.UnitTest.class)
> > public class SampleMock implements SampleAPI {
> >
> >   @Override
> >   public String doSomething() {
> >     return "Greetings from Mock";
> >   }
> > }
> >
> > When I launch the app using CdiContainer, it loads the mock bean
> correctly,
> > but when I launch it using CdiTestRunner it loads SampleImpl.
> >
> > Single stepping through OWB I see that the DeltaSpike
> ProjectStageProducer
> > sees projectStage == null and sets it to Production by default.
> >
> > Am I missing something in my test config?
> >
> > I put a zip of the project here:
> > https://www.dropbox.com/s/vg76rdapsl4yps9/ProjectStage.zip?dl=0
> > Sorry it isn't Maven!
> > "ant" will launch it normally and "ant test" will run the unit test.
> >
> > Thanks!
> > Allen
> >
>

Re: Test-Control ProjectStage

Posted by Gerhard Petracek <ge...@gmail.com>.
hi allen,

the zip-file you provided contains a bit more.
however, if i use the parts you described in your mail (with [1]),
everything works as expected.

regards,
gerhard

[1] https://github.com/os890/javase-cdi-ds-project-template



http://www.irian.at

Your JavaEE powerhouse -
JavaEE Consulting, Development and
Courses in English and German

Professional Support for Apache
MyFaces, DeltaSpike and OpenWebBeans



2014-12-05 21:25 GMT+01:00 Allen Cunningham <cu...@olsdallas.com>:

> I'm having trouble with the ProjectStage in Test-Control. My tests run with
> ProjectStage.Production instead of UnitTest.
>
> I put together a simple project to demonstrate my problem:
>
> Test class:
>
> @RunWith(CdiTestRunner.class)
> @TestControl(startScopes = ApplicationScoped.class)
> public class UnitTest {
>   @Inject SampleClient sampleClient;
>
>   @Test
>   @TestControl(projectStage = ProjectStage.UnitTest.class)
>   public void go() {
>     sampleClient.init(new StartupEvent());
>   }
> }
>
> SampleClient:
>
> @ApplicationScoped
> public class SampleClient {
>   @Inject SampleAPI sampleAPI;
>
>   public void init(@Observes @Any StartupEvent event) {
>     System.out.println(sampleAPI.doSomething());
>   }
> }
>
> The API:
>
> public interface SampleAPI {
>   public String doSomething();
> }
>
> The production implementation:
>
> @ApplicationScoped
> @Exclude(ifProjectStage = ProjectStage.UnitTest.class)
> public class SampleImpl implements SampleAPI {
>
>   @Override
>   public String doSomething() {
>     return "Greetings from Impl";
>   }
> }
>
> And finally the mock bean:
>
> @ApplicationScoped
> @Exclude(exceptIfProjectStage = ProjectStage.UnitTest.class)
> public class SampleMock implements SampleAPI {
>
>   @Override
>   public String doSomething() {
>     return "Greetings from Mock";
>   }
> }
>
> When I launch the app using CdiContainer, it loads the mock bean correctly,
> but when I launch it using CdiTestRunner it loads SampleImpl.
>
> Single stepping through OWB I see that the DeltaSpike ProjectStageProducer
> sees projectStage == null and sets it to Production by default.
>
> Am I missing something in my test config?
>
> I put a zip of the project here:
> https://www.dropbox.com/s/vg76rdapsl4yps9/ProjectStage.zip?dl=0
> Sorry it isn't Maven!
> "ant" will launch it normally and "ant test" will run the unit test.
>
> Thanks!
> Allen
>