我试图模拟调用remote_api的函数:
def get_remote_value():
ret = make_distant_call()
return ret > 0
在另一个函数中调用此函数:
from another_file import get_remote_value
def check_remote_value():
remote_value = get_remote_value()
# Actually do some computation but it doesn't change the issue
return remote_value
这是我的测试:
@mock.patch('another_file.get_remote_value')
class MyTest(TestCase):
def first_test(self, mock_get_remote_value):
mock_get_remote_value.return_value = True
self.assertEqual(check_remote_value(), True)
def second_test(self, mock_get_remote_value):
mock_get_remote_value.return_value = False
self.assertEqual(check_remote_value(), False)
当我自己运行每个测试时,它工作正常。当我运行整个班级时,第二次测试失败,因为get_remote_value
返回True
而不是False
。
我认为check_remote_value
功能仍在使用旧模拟,以及导致问题的原因。我对吗?无论如何,我怎样才能改变我的测试以使其顺利运行?
我尝试在每个函数上使用装饰器,使用补丁上下文管理器,但无济于事。模拟整个check_remote_value
并不是一个选择,因为它是我想要测试的那个。
答案 0 :(得分:1)
您需要修补check_remote_value
实际使用的名称。
@mock.path('mymodule.utils.another_file.get_remote_value')
class MyTest(TestCase):
def first_test(self, mock_get_remote_value):
mock_get_remote_value.return_value = True
self.assertEqual(check_remote_value(), True)
def second_test(self, mock_get_remote_value):
mock_get_remote_value.return_value = False
self.assertEqual(check_remote_value(), False)
这是由于函数如何查找全局值。 check_remote_value
引用了mymodule.utils
中定义的全局范围,而不是您的测试脚本,因此它需要查找get_remote_value
时的外观。