小编Ber*_*nat的帖子

单元测试和模拟,如何重置它们?

我正在测试一个需要在构造函数中进行模拟的类,所以我通常这样做:

class TestActionManager(unittest.TestCase):
    @patch('actionlib.SimpleActionClient', return_value=create_autospec(actionlib.SimpleActionClient))
    def setUp(self, mock1):
        self.action_manager = ActionManager()
Run Code Online (Sandbox Code Playgroud)

然后在这个类中我添加了所有测试。所以第一个工作正常

    def test_1(self):
        self.action_manager.f()
        self.action_manager.f.assert_called_once()
Run Code Online (Sandbox Code Playgroud)

但是如果我添加另一个测试并运行两者

    def test_2(self):
        self.action_manager.f()
        self.action_manager.f.assert_called_once()
Run Code Online (Sandbox Code Playgroud)

它说 f 已被调用两次。我本来希望 setUp 在开始每个测试之前创建一个新的 ActionManager (从而创建一个新的模拟),但显然这没有发生,因为模拟以某种方式共享。我也尝试这样做

def tearDown(self):
    del self.action_manager
Run Code Online (Sandbox Code Playgroud)

但这并不能解决问题。

我读过 Python 测试中相关的内容 - 重置所有模拟? 解决方案是使用不同的库(我想避免的事情)

并以任何方式将模拟方法重置为其原始状态?- Python Mock - 模拟 1.0b1,它使用不同的类来执行此操作。

是否有可能在每次测试之前或之后重置同一类中的模拟?

python python-unittest python-unittest.mock

12
推荐指数
1
解决办法
2万
查看次数