鉴于书中很多代码在运行时有错误
在这里记录一下,顺便保存代码
7.2.9 批量执行测试模块
文件名Calc.py
#encoding=utf-8
class Calc:
def __add__(self, x,y,*d):
result =x+y
for i in d:
result+=i
return result
def __mul__(self, a,b):
return a*b
#encoding =utf-8
import unittest
from Calc import Calc
class MyTest(unittest.TestCase):
c=None
@classmethod
def setUpClass(cls):
print ("单元测试前,创建Calc的实例")
cls.c=Calc()
def test__add(self):
print ("run add()")
self.assertEqual(MyTest.c.__add__(1,2,12),15,'test add fail')
#emcoding=utf-8
import unittest
from Calc import Calc
from functools import reduce
class MyTestCase(unittest.TestCase):
def setUp(self):
self.num=5
def testFactorial(self):
seq=range(1,self.num+1)
res=reduce(lambda x,y:x*y,seq)
self.assertEqual(res,120,"断言阶乘结果错误")
#encoing =utf-8
import unittest
class MyTestCase(unittest.TestCase):
def testEqual(self):
seq=range(11)
self.assertEqual(sum(seq),55,"断言列表之和结果错误")
#encoding =utf-8
import unittest
if __name__=='__main__':
testSuite=unittest.TestLoader().discover('.')
unittest.TextTestRunner(verbosity=2).run(testSuite)
7.2.10常用断言方法
#encoding=utf-8
import unittest
import random
class MyClass(object):
@classmethod
def sum(cls,a,b):
return a+b
@classmethod
def div(cls,a,b):
return a/b
@classmethod
def return_None(cls):
return None
class MyTest(unittest.TestCase):
def test_assertEqual(self):
try:
a,b=1,2
sum=13
self.assertEqual(a+b,sum,'断言失败,%s+%s!=%s'%(a,b,sum))
except AssertionError as e:
print(e)
def test_asserNotEqual(self):
try:
a,b=5,2
res=3
self.assertNotEqual(a-b,res,'断言失败,%s-%s=%s'%(a,b,res))
except AssertionError as e:
print(e)
def test_assertTrue(self):
try:
self.assertTrue(1==1,"表达式为假")
except AssertionError as e:
print(e)
def test_assertFalse(self):
try:
self.assertFalse(3==3,"表达式为假")
except AssertionError as e:
print(e)
def test_assertIs(self):
try:
a=12
b=a
self.assertIs(a, b, "%s与%s不属于同一对象" % (a, b))
except AssertionError as e:
print(e)
def test_assertIsNot(self):
try:
a=12
b="test"
self.assertIsNot(a,b,"%s与%s属于同一对象"%(a,b))
except AssertionError as e:
print(e)
def test_assertIsNone(self):
try:
result=MyClass.return_None()
self.assertIsNone(result,"not is None")
except AssertionError as e:
print(e)
def test_assertIsNotNone(self):
try:
result=MyClass.sum(2,5)
self.assertIsNotNone(result,"is None")
except AssertionError as e:
print(e)
def test_assertIn(self):
try:
strA="this is a test"
strB="is"
self.assertIn(strB,strA,"%s不包含在%s中"%(strB,strA))
except AssertionError as e:
print(e)
def test_assertNotIn(self):
try:
strA = "this is a test"
strB = "seleuinm"
self.assertIn(strB, strA, "%s包含在%s中" % (strB, strA))
except AssertionError as e:
print(e)
def test_assertIsInstance(self):
try:
x=MyClass
y=object
self.assertIsInstance(x,y,"%s的类型不是%s"%(x,y))
except AssertionError as e:
print(e)
def test_assertNotIsInstance(self):
try:
a=123
b=str
self.assertNotIsInstance(a,b,"%s的类型是%s"%(a,b))
except AssertionError as e:
print(e)
def test_assertRaises(self):
with self.assertRaises(ValueError)as cm:
random.sample([1,2,3,4,5],"j")
print("---"),cm.exception
try:
self.assertRaises(ZeroDivisionError,MyClass.div,3,0)
except ZeroDivisionError as e:
print(e)
def test_assertRaisesRegexp(self):
with self.assertRaisesRegex(ValueError,'literal')as ar:
int("xyz")
print ("ar.exception")
print ("ar.exception_regexp")
try:
self.assertRaisesRegex(ValueError,"invalid literal for.*XYZ$",int,'XZY')
except AssertionError as e:
print(e)
if __name__=='__main__':
unittest.main()
其中
def test_assertRaises(self):
with self.assertRaises(ValueError)as cm:
random.sample([1,2,3,4,5],“j”)
print("—"),cm.exception
try:
self.assertRaises(ZeroDivisionError,MyClass.div,3,0)
except ZeroDivisionError as e:
print(e)
出错