使用i18但不使用webapp2的Python单元测试
在我的项目中使用i18时,我遇到了一个单元测试问题。 我的项目使用framewoks i18和webapp2 该函数使用i18的翻译。但是当我进行测试时,我得到了错误-缺少全局变量请求。 例如:使用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=((“我的好消息
从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()