我有一些像
这样的python代码from pylons.i18n.translation import _
def get_message():
message = _(u"Translated message")
# interesting code to test
# [...]
return 'result'
我想像这样进行单元测试:
class MyTest(TestCase):
def test_get_message(self):
assertTrue(get_message(), 'result')
现在在nosetests中运行这个测试给了我:
TypeError: No object (name: translator) has been registered for this thread
在进行单元测试时,有没有办法停用任何有关翻译的内容?
答案 0 :(得分:1)
假设您的生产代码位于my_module.py
:
from unittest import TestCase
from mock import patch
from my_module import get_message
class MyTest(TestCase):
def test_get_message(self):
with patch("my_module._"):
result = get_message()
self.assertEqual("result", result)
使用patch
您的测试将_()
函数更改为MagicMock()
对象。文档here。
注意: mock
是Python 3.3及更高版本标准库的一部分。否则,您应首先使用pip install mock
安装它。