【发布时间】:2016-07-26 21:43:03
【问题描述】:
我的项目中有一个应用程序的简单测试套件
from django.test import TestCase
from django.test import Client
import unittest
HTTP_OK = 200
HTTP_NOTFOUND = 404
class XMLTestCase(unittest.TestCase):
"""docstring for XMLTestCase"""
def __init__(self, arg):
super(XMLTestCase, self).__init__()
self.arg = arg
def setUp(self):
self.client = Client()
def test_get_xml(self):
response = self.client.get('get_xml', {'domain': 'sqlconnect', 'stage': 'dev'})
self.AssertEqual(response.status_code, HTTP_OK)
self.AssertEqual(response['Content-Type'], 'text/xml')
def test_get_xml_notfound(self):
response = self.client.get('get_xml', {'domain': 'notadomain', 'stage': 'dev'})
self.AssertEqual(response.status_code, HTTP_NOTFOUND)
def test_upload_xml(self):
f = open('sms_domain_sqlconnecttest.xml', 'r')
response = self.client.post('test_upload_xml', {'xml_string': f.read, 'jobname': 'DRY_RUN'})
self.AssertEqual(response.status_code, HTTP_OK)
self.AssertEqual(response.content, 'File was uploaded')
当我通过调用 python manage.py test 运行单元测试时,这似乎失败了:
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/user/tireis/sqlconnect_ws/sqlconnect-dev/pyvenv/lib64/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/home/user/tireis/sqlconnect_ws/sqlconnect-dev/pyvenv/lib64/python3.4/site-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/user/tireis/sqlconnect_ws/sqlconnect-dev/pyvenv/lib64/python3.4/site-packages/django/core/management/commands/test.py", line 30, in run_from_argv
super(Command, self).run_from_argv(argv)
File "/home/user/tireis/sqlconnect_ws/sqlconnect-dev/pyvenv/lib64/python3.4/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/user/tireis/sqlconnect_ws/sqlconnect-dev/pyvenv/lib64/python3.4/site-packages/django/core/management/commands/test.py", line 74, in execute
super(Command, self).execute(*args, **options)
File "/home/user/tireis/sqlconnect_ws/sqlconnect-dev/pyvenv/lib64/python3.4/site-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/home/user/tireis/sqlconnect_ws/sqlconnect-dev/pyvenv/lib64/python3.4/site-packages/django/core/management/commands/test.py", line 90, in handle
failures = test_runner.run_tests(test_labels)
File "/home/user/tireis/sqlconnect_ws/sqlconnect-dev/pyvenv/lib64/python3.4/site-packages/django/test/runner.py", line 533, in run_tests
result = self.run_suite(suite)
File "/home/user/tireis/sqlconnect_ws/sqlconnect-dev/pyvenv/lib64/python3.4/site-packages/django/test/runner.py", line 494, in run_suite
).run(suite)
File "/home/fds/lang/python/lib64/python3.4/unittest/runner.py", line 168, in run
test(result)
File "/home/fds/lang/python/lib64/python3.4/unittest/suite.py", line 84, in __call__
return self.run(*args, **kwds)
File "/home/fds/lang/python/lib64/python3.4/unittest/suite.py", line 122, in run
test(result)
File "/home/fds/lang/python/lib64/python3.4/unittest/case.py", line 663, in __call__
return self.run(*args, **kwds)
File "/home/fds/lang/python/lib64/python3.4/unittest/case.py", line 593, in run
testMethod = getattr(self, self._testMethodName)
AttributeError: 'XMLTestCase' object has no attribute 'runTest'
添加if __name__ == '__main__': unittest.main() 不会解决这个问题
提前感谢所有帮助!
【问题讨论】:
-
它是否适用于 Django 的
TestCase,即当您将代码更改为以下class XMLTestCase(TestCase):时? -
@Nikita 仍然收到相同的错误消息。但是 manage.py 确实为我在项目中使用的模块选择了单元测试类型的测试,并且这些测试运行良好。会不会导致这个错误?
-
我尝试删除所有其他测试,因此它们基于 unittest 的事实不会干扰 django 测试
-
@Nikita 文件位于应用路径的测试目录中
-
事实上,您使用 unittest 的
TestCase不应该影响manage.py test,正如 Django 文档所说,在某些情况下可能想要使用 unittest 的TestCase而不是 Django 的TestCase情况。这里的问题在于测试加载器:它似乎没有检测到以test_开头的测试来替换默认的runTest方法,如果您想运行单个测试,则使用该方法。
标签: python django python-unittest django-testing