如何在命令行测试Python代码

3 投票
3 回答
4561 浏览
提问于 2025-04-16 09:03

在写和测试一个Python方法的时候,我现在使用的是以下这种方法:

import foo as f
bar = f.bar()

bar.runMyMethodAndSeeIfItWorks()

如果我在我的方法里做了什么改动,然后需要重新测试,我就得执行以下操作:

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

bar.runMyMethodAndSeeIfItWorks()

我在想有没有更简单的方法可以做到这一点。

3 个回答

0

你可以看看 Doctests。这是一个非常简单的学习测试的方法。基本上,你可以在交互式解释器中写下你的测试,然后把它们复制粘贴到你函数的文档字符串里。

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()

简单来说;你在想要测试的代码前面加上'>>>',然后在下面一行写上你期望的结果。虽然还有更多的内容,但这些足够让你入门了。

2

你可能是在说从一个 Python shell [x] 进行测试的情况,这里可以使用 reload。在这种情况下,使用 reload 是完全没问题的 - 我觉得你不用担心这个。你还可以这样做:

import foomodule

然后稍后可以这样:

reload(foomodule)

[x] 不要仅仅使用普通的 shell(在命令行中运行 python) - 不如试试像 IPython 或 Spyder 这样的工具。

8

写一个真正的单元测试,并从命令行运行它。我发现这是采用单元测试最有说服力的理由之一:反正你在写方法的时候就需要测试它们,不如把测试写成一个可以永久运行的形式。

撰写回答