我們在做介面測試的時候很可能設計出這樣與資料關聯的測試用例。比如
def test_create_user(self):
user = create_user(name="fred", age=29) # 呼叫建立使用者的介面
self.assertequal(user['name'], 'fred')
def test_get_user(self):
user = get_last_created_user() #呼叫獲取最新註冊使用者的介面
self.assertequal(user['name'], 'fred')
這樣的測試用例第一眼看上去是感受不出來問題的。
不過仔細想想,可能會存在下面的問題
為了解決上面的問題,我們可以這樣做
def test_create_user(self):
user = create_user(name="fred", age=29) # 呼叫建立使用者的介面
delete_user(user['id']) # 呼叫刪除介面,將建立的使用者給刪除掉
self.assertequal(user['name'], 'fred')
def test_get_user(self):
user = create_user(name="fred", age=29) # 呼叫建立使用者的介面
user = get_last_created_user() #呼叫獲取最新註冊使用者的介面
delete_user(user['id']) # 呼叫刪除介面,將建立的使用者給刪除掉
self.assertequal(user['name'], 'fred')
這樣一來髒資料問題就解決了,不過用例裡多了很多跟測試邏輯無關的**。
為了將資料處理**跟測試邏輯分開來,下一步我們可以這樣做,以sqlite3為例
import sqlite3
def setup(self):
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute("delete * from users")
c.execute("insert into users ......") # 插入一些存量資料,這樣測試翻頁之類的邏輯會容易點
conn.commit()
conn.close()
def test_create_user(self):
user = create_user(name="fred", age=29) # 呼叫建立使用者的介面
self.assertequal(user['name'], 'fred')
def test_get_user(self):
user = create_user(name="fred", age=29) # 呼叫建立使用者的介面
user = get_last_created_user() #呼叫獲取最新註冊使用者的介面
self.assertequal(user['name'], 'fred')
上面的例子裡,setup
方法會在每個用例執行之前執行,所以就不需要每條用例都去清理資料了。 程序上下文與中斷上下文的理解
一.什麼是核心態和使用者態 使用者態 使用者程式執行空間。1.程序上下文 1 程序上文 其是指程序由使用者態切換到核心態是需要儲存使用者態時cpu暫存器中的值,程序狀態以及堆疊上的內容,即儲存當前程序的程序上下文,以便再次執行該程序時,能夠恢復切換時的狀態,繼續執行。2 程序下文 其是指切換到核心態...
程序上下文與中斷上下文的理解
使用者態 使用者程式執行空間。1.程序上下文 1 程序上文 其是指程序由使用者態切換到核心態是需要儲存使用者態時cpu暫存器中的值,程序狀態以及堆疊上的內容,即儲存當前程序的程序上下文,以便再次執行該程序時,能夠恢復切換時的狀態,繼續執行。2 程序下文 其是指切換到核心態後執行的程式,即程序執行在核...
程序上下文與中斷上下文的理解
使用者態 使用者程式執行空間。1.程序上下文 1 程序上文 其是指程序由使用者態切換到核心態是需要儲存使用者態時cpu暫存器中的值,程序狀態以及堆疊上的內容,即儲存當前程序的程序上下文,以便再次執行該程序時,能夠恢復切換時的狀態,繼續執行。2 程序下文 其是指切換到核心態後執行的程式,即程序執行在核...