gpt4 book ai didi

python - Django - Unitest 还是 Doctest?

转载 作者:太空狗 更新时间:2023-10-30 02:05:46 25 4
gpt4 key购买 nike

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

最佳答案

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

单元测试的优点

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

    def basic_tests(self, cacheclass, outer=10, inner=100, hit_rate=None):
    c = cacheclass(lambda x: x + 1)
    for n in xrange(outer):
    for i in xrange(inner):
    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(lambda x: x + 1)
    for input in [0, 1, 2, 2, 2, 2, 1, 1, 0, 0]:
    self.assertEqual(sc(input), input + 1)
    self.assertEqual(sc.hit_rate(), .5)

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

  • doctests 会使您的代码变得困惑。当我编写一个类或方法时,我会在文档字符串中放入尽可能多的文档,以明确该方法的作用.但是,如果您的文档字符串超过 20 行,那么您最终可能会在代码中拥有与代码一样多的文档。这增加了阅读和编辑它的难度(我最喜欢 Python 作为一种编程语言的地方之一就是它的紧凑性)。

文档字符串的优点

  • 您的测试与特定的类和方法相关联。这意味着如果测试失败,您会立即知道是哪个类和方法失败了。您还可以使用工具来确定您的测试在您的类(class)中的覆盖率。 (当然,如果您希望测试覆盖代码的许多不同部分,这也可能是有限的)。

  • 您的测试紧挨着代码,这意味着它们更容易保持同步。当我对类或方法进行更改时,我常常忘记进行相应的更改到测试用例(当然,当我运行它们时,我很快就会得到有用的提醒)。将 doctests 放在方法声明和代码旁边会使这很容易。

  • 测试作为一种文档。查看您的代码的人可以预先包含如何调用和使用每种方法的示例。

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

关于python - Django - Unitest 还是 Doctest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8815179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com