锁定老帖子 主题:单元测试交流
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-06-08
加上了数据库就变成集成测试了吧?单元测试还是只测目标类的好,其他的对象和数据都可以mock。
以前我也总搞不清楚这个问题,搞得糊里糊涂。 建议看看Junit in action! |
|
返回顶楼 | |
发表时间:2006-12-12
数据库变化,那相应的dao的代码也要变吧,单元测试应该还是那么写啊?不太明白。
|
|
返回顶楼 | |
发表时间:2006-12-29
有用Cactus进行容器内测试的吗?翻翻论坛的帖子提到的比较少,大都是用Mock进行容器外测试,看了看Junit in action好多在讲Cactus测试.
|
|
返回顶楼 | |
发表时间:2006-12-29
mock 测试速度很快,但是没有办法测试数据库的连接, 表结构, 等等.
我觉得dao的测试其实主要还是集成测试. 正如前面的同志所说, 你可以用dbunit, 或setup(建立数据)/teardown(清理数据), 但我偏好使用spring提供的AbstractTransactionalDataSourceSpringContextTests来测试, 它可以在每个测试开始一个transaction, 之后rollback. 最近我发现也可以把这个这种测试用于service层,或action层,基本不用mock, 这种形式很像rails的测试方式. |
|
返回顶楼 | |
发表时间:2006-12-29
dao层绝对是要测试数据库的,使用mock那还不用测得了
其它如service层可以使用mock |
|
返回顶楼 | |
发表时间:2007-03-19
使用Hibernate是一个好的办法 解决了数据库的数据发生改变时测试用例的改写.当然使用一个空的数据库也可以解决这个问题
|
|
返回顶楼 | |
发表时间:2007-03-19
使用Hibernate是一个好的办法 解决了数据库的数据发生改变时测试用例的改写.当然使用一个空的数据库也可以解决这个问题
|
|
返回顶楼 | |
发表时间:2007-03-19
gf2008 写道 我们在单元测试时,经常会遇到对同数据库打交道的单元进行测试,但在数据库发生变化时我的单元测试也要发生变化。
现在我们用的是将对数据库的操作抽取成一个接口,然后虚拟这个接口来实现,但现在灵活性感觉不太好,不知道各位有没有好的办法 扩展TestCase,或者写一些utils,实现一些数据库操作的方法,比如执行一个清库脚本,插数据脚本。 setup, teardown中保证测试数据的纯净,测试之间不会相互影响。就可以了。 单元测试,尽量让测试不依赖于业务数据。 例如:对一个业务对象的操作Customer,多数业务逻辑测试应该是new Customer()就可以满足,不要从数据库加载, 而一些系统参数配置则放在测试数据中就可以了。 sit,uat 测试需要一整套的业务测试数据,这样的测试要求很强的数据关联行,这些测试数据最好有专人维护,而且应该相对稳定。这样才能保证测试的有效。在这个阶段 保持测试数据和测试的有效性是比较复杂的。 好的设计应该是测试友好的,但纯为了测试抽象就不必要了。 |
|
返回顶楼 | |
发表时间:2007-03-19
gf2008 写道 我们在单元测试时,经常会遇到对同数据库打交道的单元进行测试,但在数据库发生变化时我的单元测试也要发生变化。
现在我们用的是将对数据库的操作抽取成一个接口,然后虚拟这个接口来实现,但现在灵活性感觉不太好,不知道各位有没有好的办法 比较极端的做法是把数据库 DAO 层抽象成接口,然后做一个模拟实现。不过这样划不划得来,要看项目具体情况了。我个人做法通常是:在 setup() 中先 insert 一堆数据,然后在 tearDown() 中 delete 掉。这样就能保证单元测试不被影响。 |
|
返回顶楼 | |
发表时间:2007-03-19
引用 比较极端的做法是把数据库 DAO 层抽象成接口,然后做一个模拟实现。不过这样划不划得来,要看项目具体情况了。我个人做法通常是:在 setup() 中先 insert 一堆数据,然后在 tearDown() 中 delete 掉。这样就能保证单元测试不被影响。 setup()里起一个Transation tearDown()里rollback这样更爽了 |
|
返回顶楼 | |