测试发现:以适合 copy/paste 的格式列出所有测试

Test discovery: list all tests in a format suitable for copy/paste

我有一堆测试。我可以 运行 他们:

./manage.py test

这将为我执行测试发现和 运行 所有测试。美好的。现在我想运行一个特定的测试:

$ ./manage.py test animals.tests.AnimalTestCase.test_animals_can_speak

我可以在命令行 上输入一些帮助吗? shell 无济于事,因为:

shell 最多可以帮助我(通过使用制表符补全):

$ ./manage.py test animals/tests.py

这对我一点帮助都没有。我想要这样的东西:

$ ./manage.py discover-tests

animals
animals.tests
animals.tests.AnimalTestCase
animals.tests.AnimalTestCase.test_animals_can_speak
...

基本上,我想获得显示给我的 django(unittest?)发现的测试列表,而不是 运行,这样我就可以手动 select 一个,copy/paste 和 运行 它。

有没有办法实现,或者我需要自己动手 discover-tests

默认测试运行器无法(AFAIK)提供所有可用测试的列表。但是,第三方测试框架 nose 有一个可以为您执行此操作的收集选项。

另一种选择是通过扩展 django.test.runner.DiscoverRunner 来创建您自己的测试运行器,以创建具有此功能的新测试运行器。当然,您还需要将自己的命令添加到 manage.py。

或者,如果您不想在上面花费太多时间,请向 DiscoverRunner 添加一行代码以打印它发现的每个测试。您可以保存输出。