首页 > 解决方案 > Pytest、setup_method 和类级模拟

问题描述

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

@mock.patch('serial.Serial')
class TestApi:
  def test_something(self, mock_serial):
    # The Gadget class opens a serial port with serial.Serial()
    gadget = Gadget('dummy')
    mock_serial.assert_called_with('dummy')

这工作得很好......但我将gadget在所有其他测试中都需要相同的对象,所以我想将对象创建移动到一个setup_method方法中,pytest 将在每次测试之前调用该方法。例如:

@mock.patch('serial.Serial')
class TestApi:
  def setup_method(self):
    # The Gadget class opens a serial port with serial.Serial()
    self.gadget = Gadget('dummy')

  def test_something(self, mock_serial):
    mock_serial.assert_called_with('dummy')

看起来好像模拟在setup_method被调用时没有生效,所以上面会失败:

E           serial.serialutil.SerialException: [Errno 2] could not open port dummy: [Errno 2] No such file or directory: 'dummy'

有没有办法从内部使用类级别的模拟setup_method

标签: pythonunit-testingpytest

解决方案


推荐阅读