gpt4 book ai didi

python-3.x - Python Unittest 在运行测试时不会隔离补丁

转载 作者:行者123 更新时间:2023-12-04 02:17:54 25 4
gpt4 key购买 nike

我有两个测试,每个测试都对我的代码中使用的方法的返回值做了不同的补丁。当我单独运行测试时,它们通过了。如果我一起运行它们,我可以看到 unittest 在第二次测试中使用了错误的补丁。

我尝试使用装饰器语法进行补丁,我什至尝试将测试更改为 pytest,我还尝试使用 Nose 运行测试。我遇到了同样的问题,因为第二个测试的结果是“foo”而不是“bar”。

有没有办法按顺序运行测试?我在这里错过了什么?我们可以假设我不能更改我正在测试的类(class),例如使用依赖注入(inject)而不是打补丁。假设我必须使用补丁。

import unittest
from unittest.mock import patch
from unittest.mock import MagicMock
class TestMember(unittest.TestCase):
def setUp(self):
pass

def test_1(self):
test_json = {
"something-123": []
}

mock = MagicMock()
mock.return_value = test_json
with patch('imported_module.get_json', mock):
from some_module import some_method
result = some_method()
self.assertEqual(result, "foo")

def test_2(self):
test_json = {
"something-else-123": []
}

mock = MagicMock()
mock.return_value = test_json
with patch('imported_module.get_json', mock):
from some_module import some_method
result = some_method()
self.assertEqual(result, "bar")

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

我正在测试的类:
from imported_module import get_json

def some_method():
json_obj = get_json()
if "something-123" in json_obj.keys():
return "foo"
else:
return "bar"

为了完整起见,这里是imported_module代码:
def get_json():
return {}

最佳答案

您需要修补 get_json在哪里使用它(some_module),而不是在哪里定义它(imported_module)。那是因为 patch()修补被测代码使用的名称。

如果您更新您的 patch()为此,测试会按预期通过:

with patch('some_module.get_json', mock):

更多关于在哪里打补丁的信息 here .

关于python-3.x - Python Unittest 在运行测试时不会隔离补丁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53778298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com