测试驱动编程(一)

#测试驱动编程

在看书之前,自己先想一下如果是我我会怎么做:
(1)现在测试的时候每次都要自己点一次选项,选项的组合非常多,而且是手动,费事费力,所以需要将测试自动化;
(2)倒没有说一定要用测试驱动编程,先写测试的输入和输出,然后再写程序。针对已经写好的程序,也可以写对应的自动测试程序。对于先写测试的情况,也许等我写完了测试之后自然会有新的想法,觉得先写测试更好;
(3)平时在写一个函数的时候,自己也会先测试一下,方法就是将参数输入,如果出现问题,就先固定N-1个参数,判断唯一的变量是否有问题,没有问题再判断另外一个唯一的变量是否有问题。而写自动测试代码的时候,就可以用条件判断语句来写。首先是给出全部的参数的所有可能情况,如果这个通过了,则说明函数正确,测试结束。如果有问题,则说明当时的N个参数,中间有x个出现了问题。可以采用先固定N-1个参数,将剩下的那1个参数进行可能值的替换,如果其他的替换值都没有问题,则说明是这个值的问题,程序停止。如果其他的替换值都有问题,所以不是这个参数的问题,是其他的参数的问题。所以继续在剩下的N-1个参数中寻找。直到程序停止为止。这里的自动测试需要用到递归。总结一下,第一步根据全部参数进测试,碰到错误的参数对程序跳转到一个子测试程序,就是其他N-1个参数不动,只变换剩下那一个参数的子程序。如果这个子程序所有的都没有通过,则说明这个参数没有问题,问题出在其他参数身上。然后就继续for循环,测试其他的参数。这个逻辑是对的,但是当写程序的时候,就会发现其实并不存在当某一行出现问题,就跳转到子程序这个场景,因为子程序的场景就是主程序接下来的场景,主程序会包括所有的参数的所有值的组合,所以当运行到某一个组合出现问题的时候,程序要做的并不是停下来跳转到某个子排除法的程序,而是跳转到将错误记录到内存中展现出来,然后再继续接下来的参数值的组合的过程。

如果参数的值组合量非常大,那有可能存在某个参数的问题导致后面(n-1)个参数的所有组合都出现问题的情况,那么错误就太多了,但是事实上真正的错误出现在第一个参数上,所以还是碰到错误就停下比较好。先将所有的参数数值的组合都准备好,碰到错误的就停下,然后人工的分析和修改比较好。
function function1(x,y,z) {

}
X=[x1,x2,x3,x4…xn]
Y in [y1,y2,y3,y4…yn]
Z in [z1,z2,z3,z4…z4]

test(function1(x,y,z)){
for(i=0;i<length(X);i++){
for(j=0;i<length(Y);j++) {
for(k=0;k<length(Y);k++){
function1(X[i],Y[j],Z[k])}
}}}

这个test函数只是测试函数function1能不能运行,但是并不能证明该函数运行的结果是正确的。

所以还应该将X,Y,Z的参数的组合的结果作为一个比较的对象,用equal函数,全部返回是TRUE才说明运行的结果是正确的。

可是如果结果不是一个数值或者字符串那么应该怎样表达呢?比如说表单,输出就应该是一个字典。然后用运行的结果跟应该的结果字典进行比较,TRUE就表示是OK的。

那么我们应该是一个表单一个表单的对比,还是表单里面的每个模块分别对比呢?如果是一个表单一个表单的对比,因为发送给服务器申请的就是一个统一格式的字典,所以这个是最直观的可以进行比较的。但是这个应该是之前所有的小模块确定之后的最终版本输出的,之前应该还有很多小的输出。 可以我怎么直到这些输出应该是怎样的呢? django只有等到所有的表单填完了才会有一个cleaned_data来显示填的数据。

RK那边是怎么做的?他那边也是一样的,就是发送什么样的查询命令到数据库,应该要检查两种值,一个是发送的字典是否正确,然后是返回的字典是否正确。但是返回值里面有很多数据,这个不可能去匹配。那么就只能匹配返回值的字典结构,而且还不能检查携带的数据是否是空的,因为有的时候数据库并没有准备好,如果返回是空值,这个需要在我自己这边写测试代码的时候用备注的方式写出来。

现在思路已经比较清晰了,就是自动检查两种类型的值,一个是发往服务器的字典,一个是服务器返回的字典是否与预期的相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值