我曾经有一个带有一些单元测试的独立脚本来测试数据库中的数据。我没有使用内置的Django测试工具,因为这会创建一个空的测试数据库,这不是我想要的。
在该脚本中,我创建了三个扩展unittest.TestCase
的不同类,其中包含一些直接执行SQL语句的测试函数。
现在我希望能够直接访问Django ORM。最简单的方法是通过自定义管理commant(./manage.py datatests
)。
在独立脚本中,我可以通过以下函数调用所有单元测试:
if __name__ == '__main__':
unittest.main()
它会发现当前文件中的所有测试并运行它们。
如何在自定义Django管理命令中执行相同的操作(运行一些测试套件)?
答案 0 :(得分:2)
我很抱歉在询问之前没有长时间搜索答案,但我在另一个Stackoverflow答案中找到了解决这个问题的方法:
基本上,可以使用以下代码代替unittest.main()
:
suite = unittest.TestLoader().loadTestsFromTestCase(TestCaseClass)
unittest.TextTestRunner(verbosity=2).run(suite)
这将加载指定TestCaseClass中的所有测试。如果要在当前模块中加载所有测试,以这种方式创建套件将有所帮助:
suite = TestLoader().loadTestsFromName(__name__)
上面链接的Stackoverflow答案包含一个完整的示例。此外,unittest module docs的基本示例部分描述了同样的事情。有关加载测试的其他选项,请参阅docs中的加载和运行测试。
答案 1 :(得分:1)
您可能希望通过fixtures
指定启动数据库的内容。它将为特定测试加载db的上下文。你可以用
$ ./manage.py dumpdata my_app > fixtures/my_pre_test_db.json`
现在,在您的单元测试中,您将拥有以下内容:
class MyTestCase(TestCase):
fixtures = ['fixtures/my_pre_test_db.json']
def testThisFeature(self):
...