[英]Unittest and mock
我正在用Python中的unittest
進行測試,沒關系。 現在,我介紹了mock
,我需要解決一個問題。 這是我的代碼:
from mock import Mock
import unittest
class Matematica(object):
def __init__(self, op1, op2):
self.op1 = op1
self.op2 = op2
def adder(self):
return self.op1 + self.op2
def subs(self):
return abs(self.op1 - self.op2)
def molt(self):
return self.op1 * self.op2
def divid(self):
return self.op1 / self.op2
class TestMatematica(unittest.TestCase):
"""Test della classe Matematica"""
def testing(self):
"""Somma"""
mat = Matematica(10,20)
self.assertEqual(mat.adder(),30)
"""Sottrazione"""
self.assertEqual(mat.subs(),10)
class test_mock(object):
def __init__(self, matematica):
self.matematica = matematica
def execute(self):
self.matematica.adder()
self.matematica.adder()
self.matematica.subs()
if __name__ == "__main__":
result = unittest.TextTestRunner(verbosity=2).run(TestMatematica('testing'))
a = Matematica(10,20)
b = test_mock(a)
b.execute()
mock_foo = Mock(b.execute)#return_value = 'rafa')
mock_foo()
print mock_foo.called
print mock_foo.call_count
print mock_foo.method_calls
該代碼具有功能,並且print
結果為: True
, 1
, []
。 現在,我需要計算一下被稱為self.matematica.adder()
和self.matematica.subs()
。
您可以再次運行代碼,但是第二次使用MagicMock對象運行代碼。
from mock import Mock
from mock import MagicMock # import MagicMock
from collections import Counter
import unittest
class Matematica(object):
def __init__(self, op1, op2):
self.op1 = op1
self.op2 = op2
def adder(self):
return self.op1 + self.op2
def subs(self):
return abs(self.op1 - self.op2)
def molt(self):
return self.op1 * self.op2
def divid(self):
return self.op1 / self.op2
class TestMatematica(unittest.TestCase):
"""Test della classe Matematica"""
def testing(self):
"""Somma"""
mat = Matematica(10,20)
self.assertEqual(mat.adder(),30)
"""Sottrazione"""
self.assertEqual(mat.subs(),10)
class test_mock(object):
def __init__(self, matematica):
self.matematica = matematica
def execute(self):
self.matematica.adder()
self.matematica.adder()
self.matematica.subs()
if __name__ == "__main__":
result = unittest.TextTestRunner(verbosity=2).run(TestMatematica('testing'))
a = Matematica(10,20)
b = test_mock(a)
b.execute()
mock_foo = Mock(b.execute)#return_value = 'rafa')
mock_foo()
print mock_foo.called
print mock_foo.call_count
print mock_foo.method_calls
# added from here
c = MagicMock()
d = test_mock(c)
d.execute()
method_count = Counter([str(method) for method in c.method_calls])
print c.method_calls
print method_count
結果是:
OK
True
1
[]
[call.adder(), call.adder(), call.subs()]
Counter({'call.adder()': 2, 'call.subs()': 1})
在那里,method_count現在包含每個方法被調用了多少次。
問候
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.