Hi,
When using ApplicationComposer and mockito together in the following test
example:
package eg;
import javax.inject.Inject;
import org.apache.openejb.junit.ApplicationComposerRule;
import org.apache.openejb.mockito.MockitoInjector;
import org.apache.openejb.testing.CdiExtensions;
import org.apache.openejb.testing.MockInjector;
import org.apache.openejb.testing.Module;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.mockito.Mock;
import org.mockito.Mockito;
public @CdiExtensions class MyTest {
public interface MyDependency {
void call();
}
public static class MyBean {
private @Inject MyDependency myDependency;
public void doSomething() {
myDependency.call();
}
}
public final @Rule TestRule composer = new
ApplicationComposerRule(this);
public @Module Class<?> beanClass() {
return MyBean.class;
}
public @MockInjector Class<?> mockInjector() {
return MockitoInjector.class;
}
private @Mock MyDependency myDependency;
private @Inject MyBean myBean;
public @Test void test() {
myBean.doSomething();
Mockito.verify(myDependency).call();
}
}
I get the following exception:
SEVERE - CDI Beans module deployment failed
org.apache.webbeans.exception.WebBeansDeploymentException:
javax.enterprise.inject.UnsatisfiedResolutionException: Api type
[eg.MyTest$MyDependency] is not found with the qualifiers
Qualifiers: [@javax.enterprise.inject.Default()]
for injection into Field Injection Point, field name : myDependency, Bean
Owner : [MyBean, WebBeansType:MANAGED, Name:null, API
Types:[eg.MyTest$MyBean,java.lang.Object],
Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any]]
at
org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:325)
at
org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:196)
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:193)
at org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:41)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:895)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:694)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:690)
at
org.apache.openejb.testing.ApplicationComposers.deployApp(ApplicationComposers.java:721)
at
org.apache.openejb.testing.ApplicationComposers.before(ApplicationComposers.java:383)
at
org.apache.openejb.testing.ApplicationComposers.evaluate(ApplicationComposers.java:1060)
at
org.apache.openejb.junit.DeployApplication.evaluate(DeployApplication.java:40)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
Caused by: javax.enterprise.inject.UnsatisfiedResolutionException: Api type
[eg.MyTest$MyDependency] is not found with the qualifiers
Qualifiers: [@javax.enterprise.inject.Default()]
for injection into Field Injection Point, field name : myDependency, Bean
Owner : [MyBean, WebBeansType:MANAGED, Name:null, API
Types:[eg.MyTest$MyBean,java.lang.Object],
Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any]]
at
org.apache.webbeans.util.InjectionExceptionUtil.throwUnsatisfiedResolutionException(InjectionExceptionUtil.java:65)
at
org.apache.webbeans.container.InjectionResolver.checkInjectionPoint(InjectionResolver.java:234)
at
org.apache.webbeans.container.BeanManagerImpl.validate(BeanManagerImpl.java:1199)
at
org.apache.webbeans.util.WebBeansUtil.validate(WebBeansUtil.java:1709)
at
org.apache.webbeans.config.BeansDeployer.validate(BeansDeployer.java:909)
at
org.apache.webbeans.config.BeansDeployer.validateInjectionPoints(BeansDeployer.java:820)
at
org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:305)
... 26 more
I swear I had this working before without problem. Am I missing something? I am
using 7.0M3.
Thanks,
Xavier