У меня есть два теста, каждый из которых создает разные исправления для возвращаемого значения метода, используемого в моем коде.Когда я запускаю тесты отдельно, они проходят.Если я запускаю их вместе, я вижу, что unittest использует неправильный патч для второго теста.
Я пытался использовать синтаксис декоратора для патча, я даже пытался изменить тесты на pytest,Я также попытался запустить тесты с носом.Я сталкиваюсь с той же проблемой: второй тест получает результат «foo» вместо «bar».
Есть ли способ запустить тесты последовательно?Что я здесь пропустил?Можем ли мы предположить, что я не могу изменить классы, которые я тестирую, например, используя внедрение зависимостей вместо исправлений.Давайте предположим, что мне нужно использовать исправления.
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"
и для полноты вот код import_module:
def get_json():
return {}