如何在Django中开始TDD?

5

我对Django和单元测试都很陌生,但因为我在使用这个框架玩了一段时间后开始一个项目,所以我决定尝试一下单元测试。

除了我的热情外,我对如何规划开发过程感到非常迷茫。我在github上搜索了一些使用单元测试的Django项目,然后我偶然发现了这个。我看到只有“tagging”应用程序中有测试,看起来不错,但我不知道该如何拆分它。为什么在apps/tagging/tests/中有“models.py”文件?那里的模型类与apps/tagging/models.py中的模型类没有任何关系...

有没有想法如何解决这个问题或者找到一个好的例子来实现单元测试到Django环境中?

此外,我在文档中读到Django在1.3中引入了unittest2,那么“Django 1.1 Testing And Debugging - by Karen M. Tracey”是否有帮助阅读,还是会造成一些困惑?

无论如何,我提前感谢您的任何意见。

2个回答

5
如果我可以自己推销一下我的教程,它讲述了如何从基础开始在Django中实施TDD。 我涵盖了与“官方”Django教程相同的步骤,只不过每个步骤都使用了TDD。这包括使用Selenium进行完整的浏览器自动化测试(从最终用户的角度测试行为,包括可能稍后添加JavaScript)。我还展示了如何使用Django TestClient进行单元测试...

http://tdd-django-tutorial.com


我想我有一段时间在GitHub上偶然发现了这个项目(django投票应用程序+所有测试)。我不知道还有一个详细的步骤……谢谢,伙计。虽然已经有一段时间了,但我会去看看它的。 - la_f0ka
看看你能否理解!我尝试写得非常详细,假设读者没有任何编程知识,真正一步一步地讲解... 欢迎留下评论! - hwjp
我正在阅读它...甚至不知道功能测试可以自动化。我听说过Selenium,但从未了解过其全部内容。到目前为止看起来很棒。不过我有一个问题....在单元测试时你提交代码的频率是多少?我正在创建Poll模型,如果我编写测试、运行测试、添加字段、提交、再运行测试、再添加另一个字段、再提交等等,这似乎有点过度了...你提交代码更改的速度是什么? - la_f0ka
1
好问题...我在想是否应该在某个时候解决版本控制系统。我的模式往往是:FT的第一稿得到提交。然后,您可以为每个单元测试及其相关代码更改进行单独的提交,但这可能过度了。例如,当创建新模型时,编写单元测试,使它们全部通过,然后将测试和工作模型类一起提交...思路是使您的提交足够细粒化,以便稍后轻松撤消更改... - hwjp
好的,我明白了。如果我有更复杂的东西,那么我应该更频繁地提交等等。感谢您的帮助! - la_f0ka
1
我认为,每次进行最小的一致、自洽的工作变化后,进行提交是很好的。例如,更改FT,添加新的单元测试,更改一些产品代码,然后进行提交。每次提交时,所有测试都应该通过。有时,提交只是对产品代码进行重构,没有进行测试更改。有时提交只有几行——也许只有一行。将“实现新功能”的提交与“保留行为重构”的提交分开。将“空格和注释”提交分开。 - Jonathan Hartley

2

Django在开始测试时做得非常好。他们概述了应该和不应该测试的内容,以及如何使用一些内置的测试类。 https://docs.djangoproject.com/en/dev/topics/testing/

此外,我建议使用django-nose测试运行程序。它有许多很棒的插件。

我认为通常惯例是在每个应用程序中都有一个tests.py文件。

我个人会为我创建的每个函数编写至少1个测试。根据逻辑的复杂程度而定,可能会编写更多。随着应用程序的开发,这些测试将成为我的项目的回归测试。


你有没有或者知道一些好的项目示例,这样我就可以检查不同应用部分(表单、视图、URL、模型、会话等)的测试?那将非常有帮助。另外,django-nose 有什么作用?你使用它的哪些插件? - la_f0ka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接