我最近开始做Django项目。首先,我阅读了book on TDD with Python和官方文档(对于tests)。还有一些博客。在
我注意到的一件事是,他们编写访问数据库模型的测试。考虑以下来自here的片段
def test_home_page_can_save_a_POST_request(self):
request = HttpRequest()
request.method = 'POST'
request.POST['item_text'] = 'A new list item'
response = home_page(request)
self.assertEqual(Item.objects.count(), 1)
new_item = Item.objects.first()
self.assertEqual(new_item.text, 'A new list item')
测试断言Item
对象的数目是否为1。所以测试实际上是从数据库中添加和检索数据。这不会让测试变慢吗?在
如果测试是并行的,如果有另一个测试添加了Item
对象,这个测试用例可能会失败,对吗?在
修补方法/对象如何?上面的代码片段可以这样重构
^{pr2}$我是Django的新手,我不熟悉这些做法。我访问的教程编写了与数据库对话的测试。我想知道,这是否是Django项目测试的惯例。第二个片段(使用补丁和mock)在Django生态系统中是否完美?在
Edit:与Forms以及Mocking form.is_valid
方法相同,以返回True
或{
《Python的p.S.TDD》是一本很棒的书,它帮助我在入职培训方面有了很大的帮助。我绝对推荐给任何学习Django的人。在
如果你想测试你的模型,你很难绕过数据库,是的,它确实可以让测试变得更慢,即使使用内存中的SQLite数据库——这可能会导致其他问题FWIW,因为SQLite不是PostgreSQL之类的东西的透明替代品。在
但是假设您在视图中调用的任何模型或其他函数/对象/方法都有自己的unittest,并且您只想检查您的视图是否执行了预期的调用,那么mocking是一种可行的策略-实际上可能比测试预期调用的结果更明智(这通常会将单元测试转换为集成测试)。在
相关问题 更多 >
编程相关推荐