092-python單元測試 (二)
今天我們來學習python單元測試第二課
先來看乙個例子
class employee:
raise_amt = 1.05
def __init__(self, first, last, pay):
self.first = first
self.last = last
self.pay = pay
@property
def email(self):
return '{}.{}@email.com'.format(self.first, self.last)
@property
def fullname(self):
return '{} {}'.format(self.first, self.last)
self.pay = int(self.pay * self.raise_amt)
如何來對這個例子中的三個方法
1.email
2.fullname
進行測試呢,
很簡單,運用已經學過的assert_equal就可以了
我們把測試**寫出來
注意命名必須是test_***.py
比如如果是employee.py,那麼測試檔案就是test_employee.py
import unittest
from emp import employee
class testemp(unittest.testcase):
def test_email(self):
emp_1 = employee('bill', 'gates', 1000)
emp_2 = employee('steve', 'jobs', 2000)
self.assertequal(emp_1.email, '[email protected]')
self.assertequal(emp_2.email, '[email protected]')
def test_fullname(self):
emp_1 = employee('bill', 'gates', 1000)
emp_2 = employee('steve', 'jobs', 2000)
self.assertequal(emp_1.fullname, 'bill gates')
self.assertequal(emp_2.fullname, 'steve jobs')
emp_1 = employee('bill', 'gates', 1000)
emp_2 = employee('steve', 'jobs', 2000)
self.assertequal(emp_1.pay, 1050)
self.assertequal(emp_2.pay, 2100)
都是使用assertequal方法進行測試
在這個測試**中,我們發現,
在每個測試方法中,我們都寫了
emp_1 = employee('bill', 'gates', 1000)那麼這顯然是冗餘的,emp_2 = employee('steve', 'jobs', 2000)
如何將這兩行建立物件的**,在每個測試方法中復用呢
我們需要用到 setup方法
import unittest
from emp import employee
class testemp(unittest.testcase):
def setup(self):
print('setup')
self.emp_1 = employee('bill', 'gates', 1000)
self.emp_2 = employee('steve', 'jobs', 2000)
def test_email(self):
print('test_email')
self.assertequal(self.emp_1.email, '[email protected]')
self.assertequal(self.emp_2.email, '[email protected]')
def test_fullname(self):
print('test_fullname')
self.assertequal(self.emp_1.fullname, 'bill gates')
self.assertequal(self.emp_2.fullname, 'steve jobs')
self.assertequal(self.emp_1.pay, 1050)
self.assertequal(self.emp_2.pay, 2100)
如上**,我們新增了setup方法,
setup方法會在每個測試方法執行前執行,
所以每次執行測試方法之前,都會給self賦兩個 employee
我們執行一下測試**
setup
setup
test_email
setup
test_fullname
ran 3 tests in 0.004s
ok
我們看到,
先是setup,然後是測試方法
setup方法是在每個測試方法之前執行,
除了setup,還有teardown方法
teardown方法是在每個測試方法之後執行,
此外,還有setupclass和teardownclass方法,與這兩者的區別就是
class方法是整個class的之前和之後
我們來看下**
import unittest
from emp import employee
class testemp(unittest.testcase):
@classmethod
def setupclass(cls):
print('setupclass')
@classmethod
def teardownclass(cls):
print('teardownclass')
def setup(self):
print('setup')
self.emp_1 = employee('bill', 'gates', 1000)
self.emp_2 = employee('steve', 'jobs', 2000)
def teardown(self):
print('teardown')
def test_email(self):
print('test_email')
self.assertequal(self.emp_1.email, '[email protected]')
self.assertequal(self.emp_2.email, '[email protected]')
def test_fullname(self):
print('test_fullname')
self.assertequal(self.emp_1.fullname, 'bill gates')
self.assertequal(self.emp_2.fullname, 'steve jobs')
self.assertequal(self.emp_1.pay, 1050)
self.assertequal(self.emp_2.pay, 2100)
看下執行結果
setupclass
setup
teardown
setup
test_email
teardown
setup
test_fullname
teardown
teardownclass
ran 3 tests in 0.005s
ok
由此可見,class方法在開頭與結尾,
setup和teardown則在之前和之後
Python 單元測試
一 假設我們編寫了一段程式,主要功能是完成阿拉伯數字和羅馬數字之間的轉換 在羅馬數字中,利用7個字母進行重複或者組合來表達各式各樣的數字 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 還有一些關於構造羅馬數字的規則。此程式的框架如下 其中,class romanerror...
python 單元測試
assertequal a,b assertnotequal a,b 斷言值是否相等 assertis a,b assertisnot a,b 斷言是否同一物件 記憶體位址一樣 assertlistequal list1,list2 assertitemnotequal list1,list2 斷言...
Python單元測試
本文章整理自 使用python3.6編寫乙個單元測試demo,例如 對學生student類編寫乙個簡單的單元測試。1 編寫student類 usr bin env python3 coding utf 8 class student object def init self,name,score s...