092 Python單元測試 二

2021-10-07 00:09:54 字數 4107 閱讀 7560

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...