1.stub
與mock(1
)相同點
stub
和mock
物件都是用來模擬外部依賴,使我們能控制。
如果被測程式、系統或物件,我們稱之為
a。在測試
a的過程中,
a需要與程式、系統或物件
b進行互動,那麼
stub/mock
就是用來模擬
b的行為來與
a進行互動。(2
)不同點
stub
,也即「樁」,很早就有這個說法了,主要出現在整合測試的過程中,從上往下的整合時,作為下方程式的替代。作用如其名,就是在需要時,能夠發現它存在,即可。就好像點名,「到」即可。
mock
,主要是指某個程式的傀儡,也即乙個虛假的程式,可以按照測試者的意願做出響應,返回被測物件需要得到的資訊。也即是要風得風、要雨得雨、要返回什麼值就返回什麼值。
總體來說,
stub
完全是模擬乙個外部依賴,用來提供測試時所需要的測試資料。而
mock
物件用來判斷測試是否能通過,也就是用來驗證測試中依賴物件間的互動能否達到預期。
下面用兩個圖來說明使用mock和stub在實際測試中的關注點的不同:
左圖中,看到stub作為外部依賴的模擬,只需要模擬返回資料就ok了,我們的測試重點在於自身的邏輯。而右圖中,通過mock,模擬外部依賴的各種的返回值,來驗證與外部依賴的互動。
2.python中mock模組使用舉例
(1)未使用python mock模組的單元測試
# test.py
defadd_and_multiply
(x, y):
addition = x + y
multiple = multiply(x, y)
return (addition, multiple)
defmultiply
(x, y):
return x * y
import unittest
class
mytestcase
(unittest.testcase):
deftest_add_and_multiply
(self):
x =
3y =
5addition, multiple = add_and_multiply(x, y)
self.assertequal(
8, addition)
self.assertequal(
15, multiple)
if __name__ ==
"__main__":
unittest.main()
(2)使用python mock模組的單元測試
# test.py
import mock
import unittest
defadd_and_multiply
(x, y):
addition = x + y
multiple = multiply(x, y)
return (addition, multiple)
defmultiply
(x, y):
return x * y
class
mytestcase
(unittest.testcase):
@mock.patch('multiply')
deftest_add_and_multiply
(mock_multiply):
x =
3y =
5mock_multiply.return_value =
15addition, multiple = add_and_multiply(x, y)
mock_multiply.assert_called_once_with(
3, 5)
self.assertequal(
8, addition)
self.assertequal(
15, multiple)
if __name__ ==
"__main__":
unittest.main()
使用「mock.patch」裝飾器來用mock物件替換"multiply'。然後將它作為乙個引數"mock_multiply"插入到測試**中。在這個測試的上下文中,任何對「multiply」的呼叫都會被重定向到「mock_multiply」物件。
備註:在python2.x 中 mock是乙個單獨模組,需要單獨安裝。在python3.x中,mock已經被整合到了unittest單元測試框架中,所以,可以直接使用。
stub和mock的區別
關於stub mock的確別 1.先說不同點 stub方法裡面需要實現邏輯,因為對stub的呼叫者需要依賴,stub模組或函式的返回值,正因為此,搭建stub跟mock比起來,是比較耗費精力的。也正因為此,stub一般用於粗粒度測試。而mock的關鍵則是他要足夠啥,只要能夠讓他的依賴者與之進行足夠的...
stub 和 mock 有什麼區別
在網上看到以下的描述就 stub vs mock 進行比較 在測試中,經常涉及到對依賴 的處理,這將涉及到系統的結構的設計。乙個好的設計,必然是容易測試的。之間的依賴被極大的隔離開來,很容易的進行測 試。如何對對其他層具有依賴的 進行測試呢?可以有兩種方法 引入stub和引入mock。那麼這兩者之間...
TDD 什麼是樁(stub)和模擬(mock)?
由上圖可以知道mock框架可以非常容易的開發stub和mock,但是stub框架想要提高mock機制就要靠自己擴充套件了。stub存在的意圖是為了讓測試物件可以正常的執行,其實現一般會硬編碼一些輸入和輸出,下面的 使用了ms自帶的fake和shim來實現stub。fake實現 1 using sys...