This page describes how to create unit tests inside of a module. For details on writing unit tests in trunk, see the main ?Unit Testing page.
Getting Started With Simple Unit Tests
...
Place a test like this into your /omod/src/test/java/org/openmrs/module/yourmodule folder.package org.openmrs.module.yourmodule;
...
(In Eclipse) Right click on your new class and select Run As ? Unit Test --> Unit Test
Or at command line:
Code Block |
---|
mvn test -Torg.openmrs.mymodule.MyModuleObjectTest
|
Getting Started With Service Unit Tests
(or anything using the OpenMRS "Context" object) (or anything using hibernate in your module)
1. Set up your module classpath
You will need to reference most openmrs libraries from your module code (file /.classpath). Your classpath will most likely look very similar to this:
Code Block |
---|
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="lib" path="metadata"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="web/src"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="lib" path="dist"/>
<classpathentry kind="lib" path="lib-common/activation.jar"/>
<classpathentry kind="lib" path="lib-common/antlr_2.7.6.jar"/>
<classpathentry kind="lib" path="lib-common/asm-1.5.3.jar"/>
<classpathentry kind="lib" path="lib-common/c3p0-0.9.1.jar"/>
<classpathentry kind="lib" path="lib-common/cglib-2.1_3.jar"/>
<classpathentry kind="lib" path="lib-common/commons-collections-3.2.jar"/>
<classpathentry kind="lib" path="lib-common/commons-io-1.4.jar"/>
<classpathentry kind="lib" path="lib-common/commons-lang-2.4.jar"/>
<classpathentry kind="lib" path="lib-common/config-1.0.dtd"/>
<classpathentry kind="lib" path="lib-common/config-1.3.dtd"/>
<classpathentry kind="lib" path="lib-common/dbunit-2.4.4.jar"/>
<classpathentry kind="lib" path="lib-common/dom4j-1.6.1.jar"/>
<classpathentry kind="lib" path="lib-common/dwr-205.jar"/>
<classpathentry kind="lib" path="lib-common/ehcache-1.2.4.jar"/>
<classpathentry kind="lib" path="lib-common/hibernate325-mod.jar"/>
<classpathentry kind="lib" path="lib-common/hsqldb-1.8.0.10.jar"/>
<classpathentry kind="lib" path="lib-common/jcl-over-slf4j-1.5.6.jar"/>
<classpathentry kind="lib" path="lib-common/jsp-api.jar"/>
<classpathentry kind="lib" path="lib-common/jstl-1.1.jar"/>
<classpathentry kind="lib" path="lib-common/jta.jar"/>
<classpathentry kind="lib" path="lib-common/junit-4.4.jar"/>
<classpathentry kind="lib" path="lib-common/liquibase-1.9.4-mod.jar"/>
<classpathentry kind="lib" path="lib-common/log4j-1.2.15.jar"/>
<classpathentry kind="lib" path="lib-common/mail.jar"/>
<classpathentry kind="lib" path="lib-common/openmrs-api-1.6.2.13082-dev.jar"/>
<classpathentry kind="lib" path="lib-common/resolver.jar"/>
<classpathentry kind="lib" path="lib-common/servlet-api.jar"/>
<classpathentry kind="lib" path="lib-common/simple-xml-1.6.1-mod.jar"/>
<classpathentry kind="lib" path="lib-common/slf4j-api-1.5.6.jar"/>
<classpathentry kind="lib" path="lib-common/slf4j-log4j12-1.5.6.jar"/>
<classpathentry kind="lib" path="lib-common/spring-2.5.6.jar"/>
<classpathentry kind="lib" path="lib-common/spring-test.jar"/>
<classpathentry kind="lib" path="lib-common/spring-webmvc.jar"/>
<classpathentry kind="lib" path="lib-common/taglibs-standard-1.1.jar"/>
<classpathentry kind="lib" path="lib-common/tests-openmrs-api-1.6.2.13082-dev.jar"/>
<classpathentry kind="lib" path="lib-common/web-openmrs-api-1.6.2.13082-dev.jar"/>
<classpathentry kind="lib" path="lib-common/xercesImpl.jar"/>
<classpathentry kind="lib" path="lib-common/xml-apis.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib-common/hapi-0.5.jar"/>
<classpathentry kind="output" path="build"/>
</classpath>
|
(This is assuming you have checked out trunk to the project named "openmrs-trunk")
2. Compile the jar files in trunk
The above classpath assumes that these files exist:
- /openmrs-trunk/dist/openmrs-api-1.4.0.01.5211.jar
- /openmrs-trunk/dist/web-openmrs-api-1.4.0.01.5211.jar
- /openmrs-trunk/dist/tests-openmrs-api-1.4.0.01.5211.jar
They can be compiled with these ant build.xml targets on trunk:
- package-api
- package-web-src
- package-api-tests
And they will be located in the trunk build in the /dist folder. The .classpath file in your module refers to these in that location. You may need to right click and "refresh" the trunk folders if you're having problems.
3. Compile Your Module
The .classpath references the /dist folder because it is assuming your compiled .omod file is in there.
Run the ant package-module target to create your module.
...
Check your pom.xml
See http://svn.openmrs.org/openmrs-modules/basicmodule/trunk/ as an example.
Put these into your main pom.xml:
Code Block |
---|
<dependency>
<groupId>org.openmrs.test</groupId>
<artifactId>openmrs-test</artifactId>
<version>${openMRSVersion}</version>
<type>pom</type>
<scope>test</scope>
</dependency>
|
and into your api pom
Code Block |
---|
<dependency>
<groupId>org.openmrs.api</groupId>
<artifactId>openmrs-api</artifactId>
<version>${openMRSVersion}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
|
Create Your Test
Code Block |
---|
package org.openmrs.module.yourmodule; |
...
Code Block |
---|
/** * Tests the MyModuleService class and all of its methods * **/ public class MyModuleServiceTest extends BaseModuleContextSensitiveTest { /** * Make sure that MyService runs fine with a null * parameter to getMyModuleObject * * @throws Exception */ @Test public void shouldGetMyModuleObjectWithNullParameter() throws Exception { MyModuleService service = Context.getService(MyModuleService.class)); MyModuleObject obj = service.getMyModuleByName(null); Assert.assertNull(output); } } |
...
Run Your Test
(In Eclipse) Right click on your new class and select Run As ? --> Unit Test
(The BaseModuleContextSensitiveTest class will run through the Spring setup, loads in any omods on the classpath, creates the Context and ServiceContext classes required by the OpenMRS API. This startup takes a few seconds, so when you can, create simple tests that don't need Context and don't extend BaseModuleContextSensistiveTest)
...