Testing with JUnit or TestNG
Various approaches to initializing your application for testing
For unit type tests, initialization isn't usually a problem, as unit testing only tests a small "unit" isolated and not interacting with all the other "units" which make up your application. But there are other tests which may require many units of your application working cooperatively, and in order to work properly, all these units must be initialized properly.
Create a method which runs once before any tests
Your application should be initialzed just once before the tests. There are annotations etc. which allow one to pick a method which will be run prior to any tests. For a TestNG example (similar to Junit 4):
There are various ways (some commented out) to initialize your application in the above example.
- example.com.app.Application myApp = new example.com.app.Application( ) ;
- ERXApplication.primeApplication(NSBundle.mainBundle().bundlePath(), null, "example.com.app.Application"); //(Wonder) or
- WOApplication.primeApplication(NSBundle.mainBundle().bundlePath(), null, "example.com.app.Application"); //(No Wonder)
er.extensions.ERXExtensions.initApp(example.com.app.Application.class, new String[WO:0]) ;
One of them may work best in your situation. It may be important for your application to find its main bundle properly, and all the goodies bound up in that main bundle.
Minor configuration in eclipse
To be able to test your business objects layer in JUnit test cases, you should set the following parameters in your test case/test suite launch configuration :
First in the "Arguments" tab, set your working directory to the build product of your project. For example, for a framework project the working directory should be :
For an application it should be (using the handy wolips_dir_loc variable)
Then, in the classpath tab, select the "User Entries" entry and use the "Advanced..." button and select the "Add Folders" button.
Select the "Java" folder of your build product.
If you are using bundle-less builds you don't have a build folder. You need to check the Generate bundles option in the preferences WOLips->Build and clean your project to get it generated.
Use the "Up/Down" buttons to move this folder at the first position of your classpath.
If during your tests execution you see error messages such as cannot cast EOGenericRecord to <your object> please check that the "Java" folder is at first position in your classpath entries.