如何在命令行上测试python代码

时间:2010-12-26 13:57:25

标签: python class command-line module reload

在编写和测试python方法时,我目前正在使用以下方法:

import foo as f
bar = f.bar()

bar.runMyMethodAndSeeIfItWorks()

如果我在方法中改变某些内容,并且需要重新测试,我必须执行以下操作:

f = reload(foo)
bar = f.bar()

bar.runMyMethodAndSeeIfItWorks()

我想知道是否有更简单的方法

3 个答案:

答案 0 :(得分:7)

编写一个真实的单元测试,并从命令行运行它。我发现这是采用单元测试的最有说服力的原因之一:无论如何,你需要在编写时尝试自己的方法,你可能会以一种在此之后可以运行的形式进行。

答案 1 :(得分:1)

您必须引用来自 Python shell [x]的测试,其中使用了reload。在这种情况下,reload就好了 - 我不担心。你也可以:

import foomodule

后来:

reload(foomodule)

[x]不要只使用vanilla shell(在命令行上运行python) - 而是试试类似IPython或Spyder的东西。

答案 2 :(得分:0)

你应该研究Doctests。这是一种学习测试的简单方法。 基本上,您在交互式解释器中编写测试,然后您可以将它们复制/粘贴到函数的文档字符串中。 示例(来自Python文档)

def factorial(n):
"""Return the factorial of n, an exact integer >= 0.

If the result is small enough to fit in an int, return an int.
Else return a long.

>>> [factorial(n) for n in range(6)]
[1, 1, 2, 6, 24, 120]
>>> [factorial(long(n)) for n in range(6)]
[1, 1, 2, 6, 24, 120]
>>> factorial(30)
265252859812191058636308480000000L
>>> factorial(30L)
265252859812191058636308480000000L
>>> factorial(-1)
Traceback (most recent call last):
    ...
ValueError: n must be >= 0

Factorials of floats are OK, but the float must be an exact integer:
>>> factorial(30.1)
Traceback (most recent call last):
    ...
ValueError: n must be exact integer
>>> factorial(30.0)
265252859812191058636308480000000L

It must also not be ridiculously large:
>>> factorial(1e100)
Traceback (most recent call last):
    ...
OverflowError: n too large
"""
<do stuff>


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

tldr; 您在要使用'&gt;&gt;&gt;'进行测试的代码行之前以及它下面一行的预期结果。还有更多的东西,但这应该足以让你开始。