这是我的LoginResourceHelper
测试类
from flask.ext.testing import TestCase
class LoginResourceHelper(TestCase):
content_type = 'application/x-www-form-urlencoded'
def test_create_and_login_user(self, email, password):
user = UserHelper.add_user(email, password)
self.assertIsNotNone(user)
response = self.client.post('/', content_type=self.content_type,
data=UserResourceHelper.get_user_json(
email, password))
self.assert200(response)
# HTTP 200 OK means the client is authenticated and cookie
# USER_TOKEN has been set
return user
def create_and_login_user(email, password='password'):
"""
Helper method, also to abstract the way create and login works.
Benefit? The guts can be changed in future without breaking the clients
that use this method
"""
return LoginResourceHelper().test_create_and_login_user(email, password)
当我致电create_and_login_user('test_get_user')
时,我发现错误如下
line 29, in create_and_login_user
return LoginResourceHelper().test_create_and_login_user(email, password)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 191, in __init__
(self.__class__, methodName))
ValueError: no such test method in <class 'core.expense.tests.harness.LoginResourceHelper.LoginResourceHelper'>: runTest
答案 0 :(得分:9)
Python的unittest
模块(Flask在幕后使用)以特殊方式组织代码。
要从派生TestCase
的类运行特定的方法,您需要执行以下操作:
LoginResourceHelper('test_create_and_login_user').test_create_and_login_user(email, password)
为了理解为什么必须这样做,您需要了解默认 TestCase
对象的工作原理。
通常,在继承时,TestCase
期望采用runTest
方法:
class ExampleTestCase(TestCase):
def runTest(self):
# Do assertions here
但是,如果您需要多个TestCases
,则需要为每个{。}}执行此操作。
由于这是一件单调乏味的事情,他们决定采取以下措施:
class ExampleTestcase(TestCase):
def test_foo(self):
# Do assertions here
def test_bar(self):
# Do other assertions here
这称为测试夹具。但由于我们没有声明runTest()
,您现在必须指定希望TestCase运行的方法 - 这就是您想要做的。
>>ExampleTestCase('test_foo').test_foo()
>>ExampleTestCase('test_bar').test_bar()
通常,unittest
模块将在后端执行所有这些操作以及其他一些操作:
但是,由于你正在规避正常的unittest
执行,你必须做unitest
经常做的工作。
为了真正深入理解,我强烈建议您阅读了文档unittest。