论坛首页 综合技术论坛

写单元测试的一个问题

浏览 5070 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-01-20  
一个模块分成三层, 比如A, B ,C.  关系是Client->A->B->C
假设每一层可能是由不同的人开发也可能是同一人开发
如果 A 有10 个异常路径需要测试, 这十个异常都是在C里面可能发生的

我是否需要针对C,B,A都写十个TestCase?
或者说我对C写十个(完全覆盖), 对A只写三四个(不完全覆盖),对B不写
.......
   发表时间:2006-01-20  
我随便举个例子。譬如说UserLoginAction需要用到UserDAO,UserDAO的一种异常情况是无法连接到数据库,这个时候你认为要不要在UserLoginAction的测试里面加上“无法连接数据库”的情况呢?
0 请登录后投票
   发表时间:2006-01-20  
gigix 写道
我随便举个例子。譬如说UserLoginAction需要用到UserDAO,UserDAO的一种异常情况是无法连接到数据库,这个时候你认为要不要在UserLoginAction的测试里面加上“无法连接数据库”的情况呢?



我大致是指下面一种情况:

如果是A.Save(string input) ---> B.CheckInput(string input)--->C.RegexCheck(string input)

假设C.RegexCheck()中 ,因为input string内容的不规范有10种情况可能导致检查失败 ; B和A是否都需要(或者说建议)加上这10种情况的的Exception Test Case?
ps:A.Save()和B.CheckInput()里面还有其它需要测试的路径这里不做考虑.
0 请登录后投票
   发表时间:2006-01-20  
gigix 写道
我随便举个例子。譬如说UserLoginAction需要用到UserDAO,UserDAO的一种异常情况是无法连接到数据库,这个时候你认为要不要在UserLoginAction的测试里面加上“无法连接数据库”的情况呢?


我觉得不应该加,针对UserLoginAction的单元测试只是测试Action的单一功能的,不应该考虑到其他对象带来的影响。

在webwork2.2里面可以配置global exception,那么可以专门针对这个global exception写单元测试。
1 请登录后投票
   发表时间:2006-01-21  
robbin 写道
gigix 写道
我随便举个例子。譬如说UserLoginAction需要用到UserDAO,UserDAO的一种异常情况是无法连接到数据库,这个时候你认为要不要在UserLoginAction的测试里面加上“无法连接数据库”的情况呢?


我觉得不应该加,针对UserLoginAction的单元测试只是测试Action的单一功能的,不应该考虑到其他对象带来的影响。

在webwork2.2里面可以配置global exception,那么可以专门针对这个global exception写单元测试。


也可以用mock来实现。关键在于,你当前要测试的这个component打算处理哪些异常?如果你打算捕捉一个异常,你就应该针对它写测试。更准确地说应该是,如果你没有先编写针对某种异常的测试,根本就不应该出现捕捉它的行为。
0 请登录后投票
   发表时间:2006-01-21  
gigix 写道
robbin 写道
gigix 写道
我随便举个例子。譬如说UserLoginAction需要用到UserDAO,UserDAO的一种异常情况是无法连接到数据库,这个时候你认为要不要在UserLoginAction的测试里面加上“无法连接数据库”的情况呢?


我觉得不应该加,针对UserLoginAction的单元测试只是测试Action的单一功能的,不应该考虑到其他对象带来的影响。

在webwork2.2里面可以配置global exception,那么可以专门针对这个global exception写单元测试。


也可以用mock来实现。关键在于,你当前要测试的这个component打算处理哪些异常?如果你打算捕捉一个异常,你就应该针对它写测试。更准确地说应该是,如果你没有先编写针对某种异常的测试,根本就不应该出现捕捉它的行为。

确实如此,不过从楼主给的代码来看,没有看出A要捕捉所有的异常。

假设用ww的异常处理跳转,那么Action的单元逻辑就不会涉及这个异常的处理了,如果Action的逻辑仅仅是delegate to B的话,那么测试也没有必要了。
最多来一次大约的集成测试跑通连接的代码就ok 了。
0 请登录后投票
   发表时间:2006-01-21  
引用
也可以用mock来实现。关键在于,你当前要测试的这个component打算处理哪些异常?如果你打算捕捉一个异常,你就应该针对它写测试。更准确地说应该是,如果你没有先编写针对某种异常的测试,根本就不应该出现捕捉它的行为。

不过话又说回来,测试本身也是被 被测试的对象 所影响,所以没有先后问题啦.
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics