是否可以在测试中检查调用参数?

Is it possible to check the call parameters in the test?

如果我们调用主方法 运行 调用我感兴趣的方法 - self.get_request().

file.py

class A:
 def run():
    some logic...
    request = self.get_request()
    some logic...
    return response

test.py

from file.py import A
def test():
   """
   Inside this test, I want to check the parameters and the value returned by the
   get_request method, but I don't want to check it separately
   I want to check it by calling the parent method - run
   """
   instance = A()
   response = instance.run()
   assertions logic for instance.get_request..

我知道可以模拟一个方法,然后我们可以访问调用次数、参数等。如果我的要求可以通过模拟以某种方式实现,我只想补充一点我的模拟必须与它模拟的方法具有相同的逻辑(相同)。

你问的可能是wraps参数可以用在patch - this allows you to mock a function, while it still retains the previous (or some other) functionality (note that the argument itself is described under Mock)。与任何模拟一样,这确实允许您测试调用和调用 args,但是 not 允许您检查函数的 return 值。这必须通过其副作用进行测试(在您的情况下,通过 returned response 应该取决于 get_request 的 return 值)。

这是您案例的示例:

from unittest import mock

class A:
    def run(self):
        request = self.get_request(21)
        return request

    def get_request(self, foo):
        return foo * 2

def test_run():
    instance = A()
    with mock.patch.object(instance, "get_request", wraps=instance.get_request) as mocked:
        assert instance.run() == 42
        mocked.assert_called_once_with(21)

在这种情况下,模拟调用真正的 get_request 方法并 return 其结果,同时记录调用和调用参数。
我在 get_request 中添加了一些参数用于演示,并且 return 直接在 run 中编辑了调用的结果 - 在您的情况下这当然会有所不同,但想法应该是相同的。