簡體   English   中英

單元測試和模擬

[英]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結果為: True1[] 現在,我需要計算一下被稱為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM