blog.smart-java.nl
Ordina J-Technologies – Java Blog



Spring 2.5 – TestContext Framework

By: Jethro Bakker, 19 February 2008

Zoals je misschien weet zijn er in Spring 2.5 veel nieuwe annotaties geintroduceerd. Enkele nieuwe annotaties zijn: @Service, @Component en @Autowird. Wat maar weinig mensen weten is dat je deze annotaties ook in kunt zetten in je testklasses. Dit wordt mogelijk gemaakt door het TestContext framework. Het TestContext framework maakt het bijvoorbeeld mogelijk om de annotatie @Autowired te gebruiken in een testklasse. (Zie onderstaand voorbeeld)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@TransactionConfiguration(transactionManager="txManager")
public class BlogServiceTests {
@Autowired
private BlogService blogService;
 
...
 
}

Wat meteen opvalt is dat deze testklasse niet overerft van AbstractDependencyInjectionSpringContextTests of AbstractTransactionalSpringContextTests. Hiervoor in de plaats gebruik je nu de annotatie @ContextConfiguration en TransactionConfiguration.

Deze klasse kan runnen omdat er een annotatie @RunWith is toegevoegd. Dit is een annotatie uit het JUnit4 framework. Met behulp van deze annotatie wordt JUnit op de hoogte gebracht van het Spring TestContext framework.

Dit voorbeeld is makkelijk uit te breiden met extra annotaties zoals bijvoorbeeld:

@DirtiesContext – Geeft aan dat een test de Spring context vervuild en zorgt ervoor dat de context opnieuw wordt opgebouwd voor de volgende test.

@Transactional, @NotTransactional, @Rollback, @BeforeTransaction, en @AfterTransaction om transactie management te sturen.

Een volledig voorbeeld van een test:

@org.junit.runner.RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@TransactionConfiguration(transactionManager="txManager", defaultRollback=true)
@Transactional
public class BlogServiceTests {
 
  @Autowired
  private BlogService blogService;
 
  @Test
  @DirtiesContext
  @NotTransactional
  public void testGetMostRecent(){
    List<entry> entries = blogService.getMostRecentEntries();
    assertEquals(0, entries.size());
  }
  ....

Het schrijven van integratietesten wordt door het TestContext framework een stuk vereenvoudigd. Annotaties die je in je programmacode gebruikt kun je nu ook je testklasses gebruiken. Voor meer info verwijs ik je naar de referentie documentatie en de broncode van Spring 2.5. Enjoy!

Laat een reactie achter