关于单元测试的若干问题问题
背景
- 之前用java和hibernate一起操作mysql,做单元测试时候,有一个rollback的注解,所以无论你做了哪些些操作,该方法运行结束后,数据库又回复原样(当然也是测试数据库)。所以如果初始化数据库时有数据,无论你delete多少也都没关系啦。。。
- 现在公司用node+mysql,做单元测试很头疼。首先公司初始化数据库时,很多表是空的,所以要测试时就要提前插入数据,如果遇到表级级联的时候就更恼火,要在几个表里插入数据;其次不知道有没有回滚机制?反正我现在是木有,所以每delete一条数据,我就要再insert一条来保证后面有数据可操作。
问题
- node里面做单元测试时会不会像java那样有rollback呢?
- 测试间依赖问题,比如说我要测试insert功能,如果没有rollback功能,我就要在insert完毕后再delete掉。在一个it里面相当有测试了两个方法。 如果我分开写 insert的it 在 delete的it 前面,那样我就可以把前者的id用在后面上,但是这样存在的问题是严重依赖,前面失败后面必然失败。
虽然归根接地是数据库测试数据不完善的问题,但是在这样不完善的数据库上我给怎么测试呢?球知道
18 回复
@XGHeaven 楼主说得是mysql,用 innodb 引擎的话是支持事务的。
一般性来讲,单元测试如果牵涉到数据库,我觉得应该是要有一个专门测试用的数据库实例,每次测试开始之前重新创建,初始化好,然后开始跑测试。测试用例按这个先决条件去设定,就不用考虑数据库方面是否支持事务处理了。同时也能保证数据库的可控性。测试很重要的一点就是测试环境的可控性。