Server Test Case
Jag hittade ett litet ramverk för att köra Unit tester inne i EJB containern. Finns att ladda ner här.
Det fiffiga med detta ramverk är att man kan skriva helt vanliga unittester. Det enda man behöver göra i sin kod är att extenda ServerTestCase istället för TestCase, sedan deployar man Test-klassen i sin EJB-container. Klassen kan sedan köras som en vanlig JUnit, den lokala kopian av klassen kommar att anropa den kopia som finns inne i ejb containern. Mycket elegant tyckte jag.
Ramverket var nog skrivet för Weblogic men jag anpassade InitialContext parametrarna så att de funkar i JBoss.
Förutom de anvisningar som finns i paketet så måste man:
=======
Det fiffiga med detta ramverk är att man kan skriva helt vanliga unittester. Det enda man behöver göra i sin kod är att extenda ServerTestCase istället för TestCase, sedan deployar man Test-klassen i sin EJB-container. Klassen kan sedan köras som en vanlig JUnit, den lokala kopian av klassen kommar att anropa den kopia som finns inne i ejb containern. Mycket elegant tyckte jag.
Ramverket var nog skrivet för Weblogic men jag anpassade InitialContext parametrarna så att de funkar i JBoss.
Förutom de anvisningar som finns i paketet så måste man:
- Lägga till junit.jar i ${JBossDir}/server/default/lib
- Konfigurera ejb.xml samt jboss.xml så att unit testerna kan nå de resurser de behöver (t.ex. JDBC connections).
Ungefär så här ser mina xml filer ut:
ejb.xml=======
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>
junit.framework.ejb.TestRunnerSession
</ejb-name>
<home>junit.framework.ejb.TestRunnerSessionHome</home>
<remote>junit.framework.ejb.TestRunnerSession</remote>
<ejb-class>
junit.framework.ejb.TestRunnerSessionBean
</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<env-entry>
<description>UserActionLog</description>
<env-entry-name>UserActionLogClass</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>
theapp.model.dao.UserActionLogDAOOracle
</env-entry-value>
</env-entry>
<resource-ref>
<res-ref-name>jdbc/OraclePool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</session>
</enterprise-beans>
</ejb-jar>
jboss.xml
=========
<jboss>
<enterprise-beans>
<session>
<ejb-name>junit.framework.ejb.TestRunnerSession</ejb-name>
<jndi-name>junit.framework.ejb.TestRunnerSession</jndi-name>
<resource-ref>
<res-ref-name>jdbc/OraclePool</res-ref-name>
<jndi-name>java:/jdbc.OracleData</jndi-name>
</resource-ref>
</session>
</enterprise-beans>
</jboss>

0 Comments:
Skicka en kommentar
<< Home