使用i18但不使用webapp2的Python单元测试

使用i18但不使用webapp2的Python单元测试,python,unit-testing,google-app-engine,webapp2,python-babel,Python,Unit Testing,Google App Engine,Webapp2,Python Babel,在我的项目中使用i18时,我遇到了一个单元测试问题。 我的项目使用framewoks i18和webapp2 该函数使用i18的翻译。但是当我进行测试时,我得到了错误-缺少全局变量请求。 例如: 从unittest导入TestCase,main 从webapp2_extras.i18n导入lazy_gettext作为_ 你好(a): 如果a>0: message=((“我的好消息!11a>0”) 其他: message=((“我的好消息!11a=0”) 其他: message=((“我的好消息

在我的项目中使用i18时,我遇到了一个单元测试问题。 我的项目使用framewoks i18和webapp2 该函数使用i18的翻译。但是当我进行测试时,我得到了错误-缺少全局变量请求。 例如:

从unittest导入TestCase,main
从webapp2_extras.i18n导入lazy_gettext作为_
你好(a):
如果a>0:
message=((“我的好消息!11a>0”)
其他:
message=((“我的好消息!11a=<0”)
回信
类TestHandler(TestCase):
def testHello0(自身):
self.assertEqual(你好(0),‘我的好消息!11a=<0’)
def testHello3(自身):
self.assertEqual(您好(3),“我的好消息!11a>0”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
我有一个信息:

FAIL: testHello0 (text3.TestHandler)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/text3.py", line 14, in testHello0
    self.assertEqual(Hello(0), 'My great message!11 a =< 0')
AssertionError: Request global variable is not set.
FAIL:testHello0(text3.TestHandler)
----------------------------------------------------------------------
回溯(最近一次呼叫最后一次):
testHello0中的文件“/home/text3.py”,第14行
self.assertEqual(你好(0),‘我的好消息!11a=<0’)
AssertionError:未设置请求全局变量。
我有解决这个问题的办法,但我不喜欢。这是拐杖。如果不在webapp2上使用framewoks,您如何测试我的函数

from unittest import TestCase, main
from webapp2_extras.i18n import lazy_gettext as _
import webapp2

def Hello(a):
    if a > 0:
        message = _('My great message!11 a > 0')
    else:
        message = _('My great message!11 a =< 0')
    return message


class OneHandler(webapp2.RequestHandler):
    def get(self):
        myNumber = self.request.get('myNumber')
        myNumber = int(myNumber)
        message = Hello(myNumber)
        self.response.write(message)


routes = [('/One', OneHandler)]
app = webapp2.WSGIApplication(routes = routes)

class TestHandler(TestCase):

    def testHello0(self):
        myNumber = 0
        URL = '/One?myNumber=%s' % myNumber

        self.response = app.get_response(URL)
        self.mess = self.response.body
        self.assertEqual(self.mess, 'My great message!11 a =< 0') 

    def testHello3(self):
        myNumber = 3
        URL = '/One?myNumber=%s' % myNumber

        self.response = app.get_response(URL)
        self.mess = self.response.body
        self.assertEqual(self.mess, 'My great message!11 a > 0') 


if __name__ == '__main__':
    main()
从unittest导入TestCase,main
从webapp2_extras.i18n导入lazy_gettext作为_
导入webapp2
你好(a):
如果a>0:
message=((“我的好消息!11a>0”)
其他:
message=((“我的好消息!11a=<0”)
回信
类OneHandler(webapp2.RequestHandler):
def get(自我):
myNumber=self.request.get('myNumber')
myNumber=int(myNumber)
message=你好(我的号码)
self.response.write(消息)
路由=[('/One',OneHandler)]
app=webapp2.WSGIApplication(routes=routes)
类TestHandler(TestCase):
def testHello0(自身):
myNumber=0
URL='/One?myNumber=%s'%myNumber
self.response=app.get\u响应(URL)
self.mess=self.response.body
self.assertEqual(self.mess,'我的好消息!11a=<0')
def testHello3(自身):
myNumber=3
URL='/One?myNumber=%s'%myNumber
self.response=app.get\u响应(URL)
self.mess=self.response.body
self.assertEqual(self.mess,'我的好消息!11a>0')
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
干得好

Ran 2 tests in 0.047s OK
在0.047秒内运行了2次测试 好啊
但这不是一个好的解决方案。如何测试我的函数而不使用webapp2等?

我删除了TEXT31.py文件中的函数Hello()。 然后我使用了下一个代码:

from unittest import TestCase, main
import TEXT31

def dummy_gettext(message):
    return message

TEXT31._ = dummy_gettext # original _-function requires webapp2 environment

class TestHandler(TestCase):

    def testHello0(self):
        self.assertEqual(TEXT31.Hello(0), 'My great message!11 a =< 0')

    def testHello3(self):
        self.assertEqual(TEXT31.Hello(3), 'My great message!11 a > 0')

if __name__ == '__main__':
    main()
从unittest导入TestCase,main
导入文本31
def dummy_gettext(消息):
回信
TEXT31.u=dummy_gettext#original u-函数需要webapp2环境
类TestHandler(TestCase):
def testHello0(自身):
self.assertEqual(TEXT31.Hello(0),“我的好消息!11a=<0”)
def testHello3(自身):
self.assertEqual(TEXT31.Hello(3),“我的好消息!11a>0”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
干得好!
我很放松…

只是不测试外部代码并修补您的惰性函数

从unittest导入TestCase
进口软糖
从path.com导入乐趣
#def fun(味精):
#返回_lazy(“foo%s”)%msg
类TestHandler(TestCase):
@fudge.patch(“path.to.\u lazy”)
def test_foo(自我、虚假、懒惰)
fake_lazy.is_callable().调用(lambda s,**kw:s)
self.assertEqual(乐趣(“酒吧”),“美食酒吧”)
from unittest import TestCase, main
import TEXT31

def dummy_gettext(message):
    return message

TEXT31._ = dummy_gettext # original _-function requires webapp2 environment

class TestHandler(TestCase):

    def testHello0(self):
        self.assertEqual(TEXT31.Hello(0), 'My great message!11 a =< 0')

    def testHello3(self):
        self.assertEqual(TEXT31.Hello(3), 'My great message!11 a > 0')

if __name__ == '__main__':
    main()