关闭unittest的翻译

时间:2015-05-28 13:16:42

标签: python pylons python-unittest

我有一些像

这样的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

在进行单元测试时,有没有办法停用任何有关翻译的内容?

1 个答案:

答案 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安装它。