Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Panel

New Method of Coding Integration Tests

Here's what we are doing to modernize our integration tests.

  1. New Base Class for Integration Tests

    We have created a new abstract class, AbstractIntegrationTestBase class, found in the csf-test module. This class uses JUnit and Spring annotations to gain access to functionality previously provided by extending the deprecated Spring class AbstractTransactionalDataSourceSpringContextTests. The relevant annotations are (at the class level):
    Code Block
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:applicationContext-csf-common-config-test.xml",
                    "classpath:applicationContext-csf-webservices.xml",
                    "classpath:applicationContext-csf-common.xml",
                    "classpath:applicationContext-csf-security-spring.xml",
                    "classpath:applicationContext-csf-common-virus.xml",
                    "classpath:applicationContext-csf-common-test.xml" })
    @TestExecutionListeners({TransactionalTestExecutionListener.class, DependencyInjectionTestExecutionListener.class})
    

  • @RunWith is a JUnit annotation that tells JUnit to use the Spring-supplied class to run the unit test rather than the default JUnit runner.
  • @ContextConfiguration is a Spring annotation that tells the Spring test runner where to load the Spring context from.  
  • @TestExecutionListeners is a Spring annotation that adds functionality to the test case - in this case, transactional and dependency-injection functionality.
  1. Changes in JUnit test case classes.
  • Our JUnit integration tests should now extend the new AbstractIntegrationTestBase class. By doing so, the test class automatically gets the Spring context, and transactional and dependency-injection functionality from the base class. If required, the context configuration can be overriden simply by adding a similar @ContextConfiguration annotation to the test class.
  • To get the automatic rollback functionality, each JUnit test method should be annotated with @Transactional.
  • Beans can be injected automatically by using the @Autowired annotation.
    For a sample JUnit Integration test using the new method, take a look at edu.mit.common.dao.academic.hibernate.TestHibernateAcademicTermDao in the csf-common-legacy module.