新建一个calculator.py
class Count(object):
def __init__(self,a,b):
self.a = int(a)
self.b = int(b)
def add(self):
return self.a + self.b
一个简单的类,有构造方法,运行一个加法运算
再建立一个test.py
import calculator
class TestCount():
def test_add(self):
try:
j = calculator.Count(2,3)
add = j.add()
#这个意思就是断言 若果不等于 抛出自定义异常信息
assert(add == 5),'Integer addition result error!'
except AssertionError as msg:
print(msg)
else:
print('Test pass')
mytest = TestCount()
mytest.test_add()
运行成功
运行失败
利用unittest运行
from calculator import Count
import unittest
class TestCount(unittest.TestCase):
#起始方法
def setUp(self):
print('test start')
def test_add(self):
j = Count(2,3)
self.assertEqual(j.add(),5)
#结束方法
def tearDown(self):
print('test end')
#if __name__ == '__main__':
#设置这个要用unittest的main来执行
#目前还没有理解清楚,个人理解
#每一个py文件都可以单独执行,也就是说每一个py文件里都有隐藏的__mian__方法
if __name__ == '__main__':
unittest.main()
UnitTest的四个重要概念
1.Test Case
一个TestCase就是一个测试用例
2.Test Suite
一个功能的验证往往需要多个测试用例,这个就是测试套件
3.Test Runner
运行测试用例和套件的,并返回测试结果
4.Test Fixture
对一个测试用例环境的搭建与销毁,通过覆盖setUp盒tearDown实现
tearDown的过程很重要,要为下一个testcase留下一个干净的环境
--------利用测试套件,再放入Runner运行-----
暂时失败
#from calculator import Count
from com.sola.unittest import calculator
import unittest
class TestCount(unittest.TestCase):
#起始方法
def setUp(self):
print('test start')
def test_add(self):
j = calculator.Count(2,3)
self.assertEqual(j.add(),5)
def test_add2(self):
j = calculator.Count(8,6)
self.assertEqual(j.add(),14)
#结束方法
def tearDown(self):
print('test end')
if __name__ == '__main__':
#构造测试集
suite = unittest.TestSuite()
#把类和方法放入运行
suite.addTest(TestCount("test_add1"))
#执行测试
runner = unittest.TextTestRunner()
runner.run(suite)
改善下成功了,这里是弄得两个py 为了显示方便弄一个
import unittest
class TestOne(unittest.TestCase):
def setUp(self):
print('开始准测试了')
def funcOne(self):
print('我是用例1')
def funcTwo(self):
print('我是用例2')
def tearDown(self):
print('结束测试了')
#分割线
import unittest
from MyTest import TestOne
if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(TestOne('funcOne'))
#suite.addTest(TestOne('funcTwo'))
runner = unittest.TextTestRunner()
runner.run(suite)
还可以给套件传入数组
suite = unittest.TestSuite()
case = [TestCount("test_add1"),TestCount("test_add2")]
suite.addTest(case)
————————————————————————————————————————————————————————
断言
断言A数与B数是否相当,如果不相当设定异常msg
import unittest
class Asstest(unittest.TestCase):
def setUp(self):
#运行后输入一个参数
number = input("Enter a number")
self.number = int(number)
def test_case(self):
#断言是否10,不是抛出断言异常,并抛出设定好的断言信息
self.assertEqual(self.number,10,msg='Your input is not 10')
def tearDown(self):
pass
if __name__ == '__main__':
unittest.main()
assertIn的用法(判断是否包含)
import unittest
class testtt(unittest.TestCase):
def testOne(self):
self.assertIn('王','王八蛋',msg='瞅瞅')
if __name__ == '__main__':
unittest.main()
assertIs是否为同一对象
import unittest
class testtt(unittest.TestCase):
def testOne(self):
numA = 5
numB = 5
self.assertIs(numA,numB,'是否为同一对象')
if __name__ == '__main__':
unittest.main()
还有asserIsNone对象是否为空,assertIsInstance判断对象是否为一个实例等