Testing domain usually implies testing business methods which in turns may call BO factories methods. Depending if your domain needs a database setted up or not your test cases can be as easy as inheriting from BasicDomainTestCase or DomainTestCase.

Testing non database backed Domains

If your Domain test cases doesn't need a test database set up you can write your business logic test simply inheriting from BasicDomainTestCase, as in the following example:

import net.smartlab.web.test.*;

public class MyDomainTest extends BasicDomainTestCase {

        public void testMyMethod {
                // your code here
        }

}

The previoues example may need the presence of the file res/smartweb.jar.xml which will be used to configure your Domain instance in case it needs a configuration file. If you need to initialize your Domain with a different file you can simply re-implement the getDomainConfiguration method, as follows:

import net.smartlab.web.test.*;

public class MyDomainTest extends BasicDomainTestCase {

        protected URL getDomainConfiguration() throws Exception {
                return new File("your_domain_test_config_file").toURL();
        }

        public void testMyMethod {
                // your code here
        }

}

Testing database backed Domains

If your Domain test cases needs a test database set up you can write your business logic test simply inheriting from DomainTestCase, as in the following example:

import net.smartlab.web.test.*;

public class MyDomainTest extends DomainTestCase {

        protected String getDataSetFile() {
                return "myDbUnitDataSetFile";
        }

        public void testMyMethod {
                // your code here
        }

}

The previoues example needs the presence of the file res/smartweb.jar.hcf to initialize the Hibernate SessionFactory plus it may need the presence of the file res/smartweb.jar.xml which will be used to configure your Domain instance in case it needs a configuration file. If you need to initialize your Hibernate SessionFactory or Domain with different files you can simply re-implement the getFactoryConfiguration and getDomainConfiguration methods, as follows:

import net.smartlab.web.test.*;

public class MyDomainTest extends DomainTestCase {

        protected String getDataSetFile() {
                return "myDbUnitDataSetFile";
        }

        protected URL getDomainConfiguration() throws Exception {
                return new File("your_domain_test_config_file").toURL();
        }

        protected URL getFactoryConfiguration() throws Exception {
                return new File("your_hibernate_test_config_file").toURL();
        }

        public void testMyMethod {
                // your code here
        }

}

Unit testing with your own TestCase subclass

If for any reason you can't extend the BasicDomainTestCase or DomainTestCase base classes you can still take advantage of the testing library using the DomainTestSupport class, as in the following example:

import net.smartlab.web.test.*;
import junit.framework.*;

public class MyFactoryTest extends TestCase {

        protected void setUp() throws Exception {
                DomainTestSupport support = 
                                new DomainTestSupport("your_domain_test_config_file");
                Domain.setConfigurationStrategy(support);
                
                // Following code is needed only if you need a database setted up
                BusinessObjectFactoryTestSupport support = 
                                new BusinessObjectFactoryTestSupport("your_hibernate_test_config_file");
                BusinessObjectFactory.setConfigurationStrategy(support);
                
                super.setUp();
        }

        protected void tearDown() throws Exception {
                super.tearDown();
                
                // Needed only if you setted up the database
                BusinessObjectFactory.close();
        }

        public void testMyMethod {
                // your code here
        }

}

Obviously if you still need to setup a testing database you have to follow the DbUnit process for database testing with or without inheriting the DbUnit hierarchy, but this can became a complex process, exactly the process we are trying to hide through our classes!