首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:对类使用doctest

Python:对类使用doctest
EN

Stack Overflow用户
提问于 2010-04-25 20:24:25
回答 4查看 20.3K关注 0票数 47

是否可以将Python的doctest概念用于类,而不仅仅是函数?

如果是这样,我应该把doctest放在哪里--放在类的docstring上,还是放在构造函数的docstring上?

为了澄清,我正在寻找类似这样的东西:

代码语言:javascript
复制
class Test:
    """
    >>> a=Test(5)
    >>> a.multiply_by_2()
    10
    """
    def __init__(self, number):
        self._number=number

    def multiply_by_2(self):
        return self._number*2

提前谢谢你,

亚当

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-25 20:45:28

您缺少实际运行文件底部的doctest的代码:

代码语言:javascript
复制
class Test:
    <snip>

if __name__ == "__main__":
    import doctest
    doctest.testmod()

至于把测试放在哪里:

  • 如果是作为一个整体测试类,我会把它们放在类的文档字符串中。
  • 如果是测试构造函数,我会把它们放在构造函数的文档字符串中。
  • 如果它是在测试一个方法(就像在本例中一样),我实际上会把它放在那个方法的文档字符串中。
票数 30
EN

Stack Overflow用户

发布于 2010-10-15 02:02:15

可以使用extraglobs参数,而不是在每个方法中实例化对象:

代码语言:javascript
复制
class Test:
    def multiply_by_2(self):
        """
        >>> t.multiply_by_2()
        10
        """
        return self._number*2

if __name__ == '__main__':
    import doctest
    doctest.testmod(extraglobs={'t': Test()})
票数 73
EN

Stack Overflow用户

发布于 2010-04-25 20:36:56

doctest模块在文件中查找任何docstring并执行其中的任何嵌入代码,所以可以对类使用doctest。

至于将doctest放在类的docstring中还是放在构造函数中更好,我认为这取决于您到底记录了什么。

如果文档字符串给出了类的一般概述以及如何使用它,那么我认为最好将它放在类中。

如果文档字符串专门说明如何创建类的实例,那么它应该放在__init__方法中。

请记住,doctest的目的主要是让文档中的示例代码自我验证,所以我认为文档方面应该优先于测试方面。

编辑:

在上面的示例中,没有执行文档测试的代码--运行python test.py -v将执行主要的python代码,它只是定义了类。

您需要将以下内容添加到文件的末尾:

代码语言:javascript
复制
if __name__ == "__main__":
    import doctest
    doctest.testmod()

或者,如果您使用的是Python 2.6或更高版本,请使用以下命令运行它:

代码语言:javascript
复制
python -m doctest -v test.py
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2708178

复制
相关文章

相似问题

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