开发者

How to test python code on command line

While writing and testing a python method, I am currently using the following approach:

import foo as f
bar = f.bar()

bar.runMyMethodAndSeeIfItWorks()

If I change something in my method, and I need to retest it, I have to execute the following:

f = reload(foo)
bar = f.ba开发者_StackOverflowr()

bar.runMyMethodAndSeeIfItWorks()

I was wondering if there is a simpler approach to this


Write a real unit test, and run it from the command line. I find this is one of the most compelling reasons for adopting unit testing: you're going to need to try out your methods as you write them anyway, you might as well do it in a form that will be runnable for evermore after that.


You must be referring to testing from a Python shell [x] where reload is used. In that case, reload is just fine - I wouldn't worry about it. You can also have:

import foomodule

And later:

reload(foomodule)

[x] Don't just use the vanilla shell (running python on the command line) - rather try something like IPython or Spyder.


You should look into Doctests. It is a dead simple way to learn testing. Essentially, you write your tests in the interactive interpreter, then you can copy/paste them in the docstrings of your functions. Example (from the Python documentation)

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; You precede the line of code that you want to test with '>>>' and the expected result on the line below it. There is more to it than that but this should be enough to get you started.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜