簡體   English   中英

執行Python doctest代碼

[英]Executing Python doctest code

我有使用塢站的簡單Python代碼

#!/usr/bin/python
# http://stackoverflow.com/questions/2708178/python-using-doctests-for-classes

class Test:
    def __init__(self, number):
        self._number=number

    def multiply_by_2(self):
        """
        >>> t.multiply_by_2()
        4
        """
        return self._number*2

if __name__ == "__main__":
    import doctest
    doctest.testmod(extraglobs={'t': Test(2)})

我可以將其與python解釋器一起使用:

> python simple.py

但是,當我從doctest模塊執行代碼時,出現此錯誤:

> python -m doctest simple.py
**********************************************************************
File "simple.py", line 10, in simple.Test.multiply_by_2
Failed example:
    t.multiply_by_2()
Exception raised:
    Traceback (most recent call last):
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/doctest.py", line 1289, in __run
        compileflags, 1) in test.globs
      File "<doctest simple.Test.multiply_by_2[0]>", line 1, in <module>
        t.multiply_by_2()
    NameError: name 't' is not defined
**********************************************************************
1 items had failures:
   1 of   1 in simple.Test.multiply_by_2
***Test Failed*** 1 failures.

為什么會有這種差異? 如何解決這個問題?

區別在於,當您通過doctest執行時,它是__main__模塊,與直接執行腳本的位置( if __name__ == '__main__'塊將直接執行腳本)相比。

除了將您需要的所有信息放入文檔字符串本身之外,我不知道有什么好的解決方案:

def multiply_by_2(self):
    """
    >>> t = Test(2)
    >>> t.multiply_by_2()
    4
    """
    return self._number * 2

這將帶來額外的好處,即正在閱讀您的文檔字符串的用戶將知道正在發生的事情……他們不必偶然發現您的extraglobs關鍵字即可確定t是什么以及如何對其進行初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM