Python Babel:检索单元测试的字符串

时间:2015-05-11 07:50:43

标签: python unit-testing babel

考虑以下代码:

def get_some_text():
    return _(u"We need this text here")

编写单元测试的最佳方法是什么,以确保函数返回这个 - 由Babel引用和翻译 - 字符串?

这个天真的代码不会包含引用 - 所以这实际上是一个不同的" Babel字符串":

def test_get_some_text(self):
    self.assertEqual(get_some_text(), _(u"We need this text here"))

1 个答案:

答案 0 :(得分:0)

如果您正在使用烧瓶,请不要介意使用嘲讽,并且您只测试_返回的内容(即get_some_text没有对_的结果进行任何其他转换,然后您可以模拟_的返回值并测试您得到的结果:

import mock


@mock.patch('gettext.ugettext')
def test_get_some_text(self, mock_ugettext):
  mock_ugettext.return_value = u'Hello World'

  self.assertEqual(get_some_text(), u'Hello World')

我们知道_here调用ugettext,如果我们之前删除了import ipdb; ipdb.set_trace()行,我们可以跳转到python shell,调用{{1 }},并使用this answer查找get_some_text的导入路径,结果为ugettext

如果您只使用了babel,并且知道了翻译目录的路径,那么您可以make your own translations进行测试:

gettext.ugettext