首页 > 代码库 > 结对编程2--单元测试(95\97)

结对编程2--单元测试(95\97)

小组成员: 林清青 201421123095 

      郑   莹 201421123097

代码地址:https://coding.net/u/zy97/p/pp2/git/tree/master/

 

一、测试需求分析
a.把计算模块提取出来,单独创建一个类。

b.针对提取出来的计算类的接口函数做单元测试.

c.测试相关单元模块运算错误:

输入错误。例如:“1 ++ 2”的随机算式,或者“*”“/”在第一个的错误算式。
除数为0的非法表达式错误。例如:除数为0的错误算式。
向用户提示错误类型。
二、测试框架
Python语言的开发人员可以使用Steve Purcell编写的PyUnit作为单元测试框架,通过将单元测试融合到PyUnit这一测试框架里,Python程序员可以更容易地增加、管理、执行测试用例,并对测试结果进行分析。此外,使用PyUnit还可以实现自动单元测试(回归测试)

我们在采用PyUnit这一单元测试框架后,用于测试的代码做了相应的改动:

用import语句引入unittest模块。
让所有执行测试的类都继承于TestCase类,可以将TestCase看成是对特定类进行测试的方法的集合。
在setUp()方法中进行测试前的初始化工作,并在tearDown()方法中执行测试后的清除工作,setUp()和tearDown()都是TestCase类中定义的方法。
通过单元测试代码,测试加法是否能正确工作。

 

def test_add(self):
startnum=0
rightnum=0 
countnum = int( input("请输入你想做的题数:") )

for startnum in range(0,countnum):

r1=random.randint(0,99)
r2=random.randint(1,99)
r3=random.randint(0,99)
r4=random.randint(1,99)
shu1= random.randint(0,99) #or Fraction(r1, r2) 
shu2= 5
random.randint(0,99) 
#h1=str((shu1))+random.choice(‘-+*/‘)+str(shu2)
#print random.choice(‘-+*/‘)
fuhao=random.choice(+)
h2=str((shu1))+fuhao+(+str((shu2))+)
h3=h2+=
print h3

h4=str(float(shu1))+fuhao+(+str(float(shu2))+)
biaozhun=eval(h4)
answer = raw_input("请输入你的答案:") 

right=float(%.3f%biaozhun)



if answer.find(/)!=-1:
#answer2=float(answer)
#print "ddddddddddddd"
reg=r(.+)/
first=re.findall(reg,answer)

y=str(first)
k=y.replace(\‘, ‘‘)
x=str(k)
x1=x.replace([, ‘‘)
x2=str(x1)
x3=x2.replace(], ‘‘)
x4=str(x3)
x5=x4.replace(\",‘‘)
ss=str(x5)
#o=eval(ss+"‘")
#print str(ss)
firstnum= float(ss)
#print firstnum
#namelist=re.findall(name)
#print name

reg1=r/(.+)
last=re.findall(reg1,answer)
y1=str(last)
k1=y1.replace(\‘, ‘‘)
x1=str(k1)
x2=x1.replace([, ‘‘)
x3=str(x2)
x4=x3.replace(], ‘‘)
x5=str(x4)
x6=x5.replace(\",‘‘)
ss1=str(x6)
#o=eval(ss+"‘")
#print str(ss1)
lastnum= float(ss1)
#print lastnum
#namelist=re.findall(name)
#print name
#firstnum=eval(reg)
#lastnum=eval(reg1)
answer5=firstnum/lastnum
#print ‘rrrrrrrrrrr‘
print answer5
if right==float(%.3f%answer5):
print "你的答案正确!"
rightnum=rightnum+1
else :
print "你的答案错误,正确的答案为"

print float(%.3f%biaozhun)
else:
answer2=float(answer)
#print "ssssssssssssss"
if right==float(%.3f%answer2):
print "你的答案正确!"
rightnum=rightnum+1

else: 
print "你的答案错误,正确的答案为"

print float(%.3f%biaozhun)

#print h1
print "命中率为"
print rightnum
print countnum

 

 

测试截图:

技术分享

 技术分享

2.通过单元测试代码,测试加减乘除功能。(代码详见coding)

技术分享
技术分享

 

 技术分享

技术分享

 


3.通过单元测试代码,测试计算类对于各种参数的支持

输入错误。例如:“1 ++ 2”的随机算式,或者“*”“/”在第一个的错误算式。

技术分享

除数为0的非法表达式错误

技术分享

向用户提示错误类型,总共测试了六个模块:
技术分享

告诉函数的调用者 “你错了”? 把返回的字符串定义为 “-1” 来表示?

如果真的计算结果是 “-1” 又怎么处理呢?

技术分享


覆盖率:

技术分享


三、小结与感受
通过测试,是否有效发现了程序计算模块的问题,并给予改进?
首先一开始的时候我觉得单元测试并没有用,但是经过一晚上的测试我不仅学会使用pyunit,而且明白了一个真正的软件的产生是怎么样的一个过程。而且在这个过程中我不仅对这些代码更加熟悉、更理解这个框架,更具有条理性。

感受:
对于这次结对编程的作业我知道了单元测试的意义。我也遇到一些问题,例如我不明白单元的测试的意义在哪里,因为Python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等这些,先不说如何写单元测试,光是怎么运行单元测试就有N多种方法,再因为它是测试而非功能,是很多人没兴趣触及的东西,起初我也是如此想的。但是经过这次编程我明白了单元测试的重要性,明白了一个TestCase的实例就是一个测试用例。
四、结对过程及照片
技术分享

五、              psp

SP2.1 Personal Software Process Stages Estimated time(h) actual time(h)
Planning 计划

 

3

 

2
· Estimate 估计这个任务需要多少时间 12 12
Development 开发 9 5
· Analysis 需求分析 (包括学习新技术) 2 0.5
· Coding Standard 代码规范 0.5 1
· Design 具体设计 1 1.5
· Coding 具体编码 2 3
· Code Review 代码复审 1.5 1
· Test 测试(自我测试,修改代码,提交修改) 1 1
Reporting 报告 2 1

结对编程2--单元测试(95\97)