2017-03-03 3 views
0

Ich bin nicht wirklich vertraut mit cdi oder oder JUnit-Regel (in der Tat habe ich entdeckt, sie einfach), aber ich versuche, meinen ldap api mit der embedded-ldap-junit Bibliothek zu testen (basierend auf UnboundID LDAP SDK) nach this post. Ich präzis, dass meine API nicht auf UnboundId LDAP SDK basiert!JUnit Regel und cdi

Hier ist mein Code:

@RunWith(CdiRunner.class) 
public class LdapTest extends TestCase { 
    public static final Logger LOGGER = LoggerFactory.getLogger(LdapTest.class); 
    public static final String DOMAIN_DSN = "dc=my.domain"; 
    public static final String LDIF_FILE = "agents.ldif"; 
    public static final String BPM_SCHEMA = "schema.ldif"; 

    @Inject 
    private LDAPManager ldapManager; 

    @Rule 
    public EmbeddedLdapRule embeddedLdapRule = EmbeddedLdapRuleBuilder.newInstance().usingDomainDsn(DOMAIN_DSN) 
     .importingLdifs(LDIF_FILE).withSchema(BPM_SCHEMA).build(); 

    @Test 
    public void getAgent() throws Exception { 
     embeddedLdapRule.ldapConnection(); 
     DirContext dirContext = embeddedLdapRule.dirContext(); 
     ldapManager.setContext(dirContext); 
     assertNotNull(ldapManager.getAgent("123")); 
    } 
} 

Wenn ich versuche, es zu laufen, ich habe die folgende Ausnahme:

org.jboss.weld.exceptions.DefinitionException: WELD-000075 Normal scoped managed bean implementation class has a public field: [email protected] @ApplicationScoped class org.mycompany.LdapTest 
at org.jboss.weld.bean.ManagedBean.checkBeanImplementation(ManagedBean.java:459) 
at org.jboss.weld.bean.AbstractClassBean.initialize(AbstractClassBean.java:176) 
at org.jboss.weld.bean.ManagedBean.initialize(ManagedBean.java:329) 
at org.jboss.weld.bootstrap.AbstractBeanDeployer.deploy(AbstractBeanDeployer.java:117) 
at org.jboss.weld.bootstrap.BeanDeployment.deployBeans(BeanDeployment.java:217) 
at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:357) 
at org.jboss.weld.bootstrap.api.helpers.ForwardingBootstrap.deployBeans(ForwardingBootstrap.java:70) 
at org.jboss.weld.environment.se.Weld.initialize(Weld.java:135) 
at org.jglue.cdiunit.CdiRunner.createTest(CdiRunner.java:94) 
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263) 
at org.jglue.cdiunit.CdiRunner.methodBlock(CdiRunner.java:122) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

ich auf der embeddedLdapRule Zugriffsebene Modifikatoren zu spielen versucht (privat,/geschützt/öffentlich) ohne Erfolg. Könntest du mir bitte erklären, was ich falsch mache? Danke vielmals !

Antwort

0

ich endlich eine Antwort gefunden habe: Die Lösung ist CdiUnit test with Junit @Rule is impossible because of a public private field paradox

So:

@RunWith(CdiRunner.class) 
public class LdapTest extends TestCase { 
    public static final Logger LOGGER =  LoggerFactory.getLogger(LdapTest.class); 
    public static final String DOMAIN_DSN = "dc=my.domain"; 
    public static final String LDIF_FILE = "agents.ldif"; 
    public static final String BPM_SCHEMA = "schema.ldif"; 

    @Inject 
    private LDAPManager ldapManager; 

    private EmbeddedLdapRule embeddedLdapRule = EmbeddedLdapRuleBuilder.newInstance() 
     .usingDomainDsn(DOMAIN_DSN) 
     .importingLdifs(LDIF_FILE) 
     .withSchema(BPM_SCHEMA) 
     .build(); 

    @Rule 
    public EmbeddedLdapRule getLdapRule() { 
     return embeddedLdapRule; 
    } 

    @Test 
    public void getAgent() throws Exception { 
     embeddedLdapRule.ldapConnection(); 
     DirContext dirContext = embeddedLdapRule.dirContext(); 
     ldapManager.setContext(dirContext); 
     assertNotNull(ldapManager.getAgent("123")); 
    } 
}