testNG相关问题的整理

TestNG与Spring集成测试
本文探讨了使用TestNG结合Spring框架进行数据库相关的集成测试时遇到的问题及解决方法。特别关注了如何通过抽取公共初始化代码到基类来提高测试效率,并讨论了不同访问修饰符对测试结果的影响。

最近正在使用testNG做测试,因为使用的是spring做容器所以使用spring的自带的测试支持类,出现问题的逻辑是这样,因为所做的测试是数据库相关的,所想想在方法的执行之前对数据库的相关数据进行初始化,当前业务测试方法执行完成之后再回滚数据,具体的代码如下:

public class ICoreDictServiceTest extends
		CoreBaseTransactionalTestNGSpringContextTests {
	@BeforeMethod
	void setetUp() {
		LOG.debug("开始数据加载...");
		String scriptResource = "/com/risen/core/base/service/core-oracle-dataload.sql";
		this.executeSqlScript(scriptResource, true);
		LOG.debug("结束数据加载...");
	}
	
	@Test
	public void testListCoreDict() {
		int count = this.countRowsInTable("CORE_DICT");
		Assert.assertEquals(count, 3);
		
		ICoreDictService cds = this.coreDictService;
		CoreGlobalContextCache cache = null ;
		cache = this.coreGlobalContextCache;
		CoreDictServiceImpl impl = (CoreDictServiceImpl) cds;
		impl.reload();//在重建数据库之后需要重新加载字典
		CoreDictWrapper dictWrapper = cache.getCoreDictWrapper();
		List<CoreDict> dictList = dictWrapper.getDictList();
		Assert.assertEquals(dictList.size(), 3);
	}
}

在测试的时候没有什么问题是可以通过的测试的,后来由有多个测试类需要共享数据库初始化的代码 ,所以想把setUp方法抽取到超类当中去,结果测试就都失败了,在网找了很久也没找到这样的问题,最后发现将setUp方法的修饰符改为public 与 protected是可以的,不加修饰符,或使用private修饰符是不以的具体是个什么原因不清楚

 

对于@BeforeGroups与@BeforeMethod先后关系是@BeforeGroups方法会比@BeforeMethod方法先执行,在spring对testNG框架的支持类中执行测试的整个生命周期所有标注方法的执行顺序为:

 

上图的执行流程只是一个简化流程,尤其对组件执行逻辑还有很多值得探讨的地方,对于@BeforeSuit与@BeforeTest这两处逻辑我认为作用并不是很大,因为它们的执行是在spring容器初始化之前,既然使用spring那么通常是要利用容器,所以通常是容器初始化之后再进行相关操作比较方便,但这也不一定,比如你可以在之前对容器进行某些初始化操作;总体讲Before方法要比After方法更有用,这似乎与Struts2的拦截器有点类似;另外如果你想执行数据库初始化操作,以便测试可以重复运行,那此方法你必须使用在事务之内方法回调
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值