对 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. 测试成功
搜索数据库对应的表,我们看到里面没有数据,说明自动事务起作用了。