如何在Python unittest中测试一个方法被不同参数调用两次的情况

问题描述 投票:1回答:1

假设我有一个类似于这样的方法,

from otherModule import B
def A():
    for pair in [[1, 2], [3, 4]]:
        B(*pair)

我有一个看起来像这样的测试:

class TestA(unittest.TestCase):
    @patch("moduleA.B")
    def test_A(self, mockB):
        A()
        mockB.assert_has_calls([
            call(1, 2),
            call(3, 4)
        ])

出于某种原因,我得到一个 AssertionError: Calls not found. 因为它只用 3,4 两次。我的做法看起来对吗?

python-unittest
1个回答
0
投票

工作正常,无法重现错误。

例如

moduleA.py:

from otherModule import B


def A():
    for pair in [[1, 2], [3, 4]]:
        B(*pair)

otherModule.py:

def B(x, y):
    print(x, y)

test_moduleA.py:

import unittest
from unittest.mock import patch, call
from moduleA import A


class TestA(unittest.TestCase):
    @patch("moduleA.B")
    def test_A(self, mockB):
        A()
        mockB.assert_has_calls([
            call(1, 2),
            call(3, 4)
        ])


if __name__ == '__main__':
    unittest.main()

单元测试结果与覆盖率报告。

.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK
Name                                         Stmts   Miss  Cover   Missing
--------------------------------------------------------------------------
src/stackoverflow/59179990/moduleA.py            4      0   100%
src/stackoverflow/59179990/otherModule.py        2      1    50%   2
src/stackoverflow/59179990/test_moduleA.py       9      0   100%
--------------------------------------------------------------------------
TOTAL                                           15      1    93%

Python版本。Python 3.7.5

© www.soinside.com 2019 - 2024. All rights reserved.