使用 Spring 进行单元测试(6)

对 TestNG 的支持

Spring 2.5 以后,就开始支持 TestNG 了,支持的方法包括:

将您的 TestNG 测试类继承 Spring 的测试父类:AbstractTransactionalTestNGSpringContextTests 或者 AbstractTestNGSpringContextTests,这样您的 TestNG 测试类内部就可以访问 applicationContext 成员变量了

不继承 Spring 父类,在测试类上使用 @TestExecutionListeners 注释标签,可以引入的监听器包括

DependencyInjectionTestExecutionListener:使得测试类拥有依赖注入特性

DirtiesContextTestExecutionListener:使得测试类拥有更新 applicationContext 能力

TransactionalTestExecutionListener:使得测试类拥有自动的事务管理能力

这里我们演示一下如何使用 Spring 提供的 TestNG 父类来进行测试。


清单 12. AccountServiceTestNGTest.Java

package testng; import static org.Junit.Assert.assertEquals; import org.Springframework.beans.factory.annotation.Autowired; import org.Springframework.test.context.ActiveProfiles; import org.Springframework.test.context.ContextConfiguration; import org.Springframework.test.context.testng. AbstractTransactionalTestNGSpringContextTests; import org.Springframework.transaction.annotation.Transactional; import service.AccountService; import domain.Account; @ContextConfiguration("/config/Spring-db.xml") @Transactional @ActiveProfiles("test") public class AccountServiceTestNGTest extends AbstractTransactionalTestNGSpringContextTests { @Autowired private AccountService service; @org.testng.annotations.Test public void testGetAcccountById() { Account acct = Account.getAccount(1, "user01", 18, "M"); service.insertIfNotExist(acct); Account acct2 = service.getAccountById(1); assertEquals(acct,acct2); } }  

执行测试,我们将看到测试成功。


图 4. 测试成功

图 4. 测试成功

搜索数据库对应的表,我们看到里面没有数据,说明自动事务起作用了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5e03286ffd137e51744799d20aff3120.html