1

考虑这个小型交互式 Python 会话:

>>> a = 'a'
>>> b = 'b'
>>> ab = a + b
>>> ab
'ab'

有没有办法以编程方式做到这一点?我想每行注入一行,最后对结果进行单元测试。我无法创建 Python 脚本并像往常一样执行它,因为在交互式 Python 中存在一些反应不同的代码(例如,inspect.getcomments())。我想测试交互式 Python 中的行为。我更喜欢 Python3 解决方案,但我怀疑该解决方案与 Python2 中的解决方案没有什么不同。

4

1 回答 1

3

一种方法是使用 Python 的doctest模块。它本质上解析代码,就好像它在 Python REPL 中一样,然后断言输出与该 REPL 中编写的内容匹配。

$ cat foo
>>> a = 'a'
>>> b = 'b'
>>> ab = a + b
>>> ab
'ab'
$ python -m doctest foo
$ cat > bar
>>> a = 'a'
>>> b = 'b'
>>> ab = b + a # oops
>>> ab
'ab'
$ python -m doctest bar
**********************************************************************
File "bar", line 4, in bar
Failed example:
    ab
Expected:
    'ab'
Got:
    'ba'
**********************************************************************
1 items had failures:
   1 of   4 in bar
***Test Failed*** 1 failures.
于 2013-10-22T03:21:25.800 回答