<p>结果弄得一团糟:鼻子几乎只使用
<code>TestLoader.load_tests_from_names</code>函数(它是<em>唯一的函数</em>在
<a href="https://github.com/nose-devs/nose/blob/master/unit_tests/test_loader.py" rel="nofollow">^{<cd2>}</a>)
所以既然我想从一个任意的python对象装载东西,我
似乎需要自己写一个算出来要用什么样的加载函数。在</p>
<p>此外,还要正确地使<code>nosetests</code>脚本正常工作
我需要进口大量的东西。我一点也不确定
是做事最好的方式,甚至不是那种。但这是一个脱光
对我有用的示例(无错误检查,更详细):</p>
<pre><code>import sys
import types
import unittest
from nose.config import Config, all_config_files
from nose.core import run
from nose.loader import TestLoader
from nose.suite import ContextSuite
from nose.plugins.manager import PluginManager
from myapp import find_test_objects
def load_tests(config, obj):
"""Load tests from an object
Requires an already configured nose.config.Config object.
Returns a nose.suite.ContextSuite so that nose can actually give
formatted output.
"""
loader = TestLoader()
kinds = [
(unittest.TestCase, loader.loadTestsFromTestCase),
(types.ModuleType, loader.loadTestsFromModule),
(object, loader.loadTestsFromTestClass),
]
tests = None
for kind, load in kinds.items():
if isinstance(obj, kind) or issubclass(obj, kind):
log.debug("found tests for %s as %s", obj, kind)
tests = load(obj)
break
suite = ContextSuite(tests=tests, context=obj, config=config)
def main():
"Actually configure the nose config object and run the tests"
config = Config(files=all_config_files(), plugins=PluginManager())
config.configure(argv=sys.argv)
tests = []
for group in find_test_objects():
tests.append(load_tests(config, group))
run(suite=tests)
</code></pre>