有没有办法阻止./manage.py test
对django.contrib.auth
等已安装的应用程序运行测试?
答案 0 :(得分:1)
我正在为我的项目编写一个自定义测试运行器,它遍历项目树,导入所有模块,遍历每个模块中的类,查找unittest.TestCase的子类,并将它们全部添加到TestSuite,然后运行它们。这样,我可以过滤掉django.contrib的那些,还包括我自己的一些managetest.TestCases,其中manage.py忽略(因为它们不在myapp / tests.py中等)
我只是写了它并且它无疑充满了错误,但到目前为止,这就是它的样子:
from inspect import getmembers, isclass
import os
from os.path import join, relpath
import sys
from unittest import TestCase, TestLoader, TestSuite, TextTestRunner
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.test.utils import setup_test_environment
sys.path.append('..')
def import_module(modname):
print modname
try:
__import__(modname)
return sys.modules[modname]
except Exception as e:
print
print ' %s: %s' % (type(e).__name__, e)
def get_modules(root):
for subdir, dirs, fnames in os.walk(root):
for fname in fnames:
if fname.endswith('.py'):
path = relpath(join(subdir, fname))
modname = path.replace('/', '.')[:-3]
if modname.endswith('__init__'):
modname = modname[:-9]
if modname == '':
continue
yield import_module(modname)
def get_testcases(module):
for name, value in getmembers(module):
if isclass(value) and issubclass(value, TestCase) and value is not TestCase:
print ' ', name, value
yield value
def main():
setup_test_environment()
testcases = set()
for module in get_modules(os.getcwd()):
for klass in get_testcases(module):
testcases.add(klass)
print 'found %d testcases' % (len(testcases),)
suite = TestSuite()
for case in testcases:
suite.addTest(TestLoader().loadTestsFromTestCase(case))
print 'loaded %d tests' % (suite.countTestCases(),)
TextTestRunner(verbosity=2).run(suite)
if __name__ == '__main__':
main()
答案 1 :(得分:0)
正确的解决方案就像lazerscience所说:
python manage.py test appname appname.SomeTestCase appname.TestCase.test_method
当您只是run test command时,将测试INSTALLED_APPS中的所有应用,包括来自contrib的应用(例如auth,admin,sites等)。
此外,如果某些测试失败,则表示某些内容无法正常工作,您应该修复问题,然后隐藏失败的测试。如果Django测试失败,请确保使用稳定版本。