首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django - Unitest还是Doctest?

Django - Unitest还是Doctest?
EN

Stack Overflow用户
提问于 2012-01-11 14:40:54
回答 1查看 616关注 0票数 4

我即将开始我的第三个中型项目,并希望(我承认这是我有生以来第一次)开始使用单元测试。我不知道该用哪种方法,unitests还是doctest。哪种方法是最有效的,或者初学者应该选择实现哪种方法?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-11 15:04:49

我碰巧更喜欢单元测试,但这两种方法都是优秀的、开发良好的测试方法,而且都得到了Django的良好支持(有关详细信息,请参阅here )。简而言之,每一个都有一些关键的优点和缺点:

单元测试的优点

  • unittests 允许轻松创建更复杂的测试。如果您的测试涉及调用多个帮助器函数、迭代和其他分析,doctests可能会感觉受到限制。另一方面,unittests只是编写Python代码-您可以在Python中做的任何事情都可以在那里轻松完成。以这段代码(我曾经写过的单元测试的修改版本)为例:

定义basic_tests(self,cacheclass,outer=10,inner=100,hit_rate=None):c=高速缓存类(λx: x+ 1),对于xrange中的n(外部):对于xrange中的i(内部):self.assertEqual(c(i),i+ 1) if hit_rate != None: self.assertEqual(c.hit_rate(),hit_rate) def test_single_cache(self):self.basic_tests(SingleCache,outer=10,inner=100,hit_rate=0) sc =SingleCache(λx: x+ 1),输入为0,1,2,2,2,1,1,0,0: self.assertEqual(sc(输入),输入+ 1) self.assertEqual(sc.hit_rate(),.5)

我使用basic_tests方法对类运行一些测试,然后在for循环中运行断言。在doctest中有一些方法可以做到这一点,但它们需要大量的思考-doctest最擅长检查对函数的特定调用是否返回了它们应该返回的值。(在Django中尤其如此,它有非常棒的单元测试工具(请参阅django.test.client).

  • doctests可能会弄乱您的代码。当我编写类或方法时,我会尽可能多地将文档放在文档字符串中,以明确该方法的作用。但是,如果您的文档字符串是20+行长,那么您的代码中的文档数量可能与代码中的数量一样多。这增加了阅读和编辑它的难度(作为一种编程语言,我最喜欢Python语言的一个方面就是它的compactness).

文档字符串优点

  • Your测试与特定的类和方法相关联。这意味着如果测试失败,您可以立即知道哪个类和方法失败了。您还可以使用工具来确定测试跨类的覆盖率。(当然,这也可能是有局限性的,如果您想要一个测试涵盖code).
  • Your测试的许多不同部分,这意味着更容易保持它们的同步。当我对类或方法进行更改时,我经常忘记对测试用例进行相应的更改(当然,当我运行它们时,很快就会得到有用的提醒)。将文档测试放在方法声明和代码旁边,可以将此easy.
  • Tests用作一种文档。查看您的代码的人员可以预先包含如何调用和使用每个方法的示例。

结论:我当然更喜欢单元测试,但这两者都有很好的理由。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8815179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档