2

我有一个模块applications/webapp/modules/a.py,其中包含一个local_import来导入applications/webapp/modules/b.py。我想对 a.py 和 b.py 进行 doctest。带有“-T”选项的 web2py shell 部分工作,但在说“在 a.py 中查找测试:”后会抱怨下面粘贴的异常。

我知道这是因为“-T”选项仅用于测试控制器。但是由于 a.py 中的 local_import,没有简单的方法可以在 web2py 环境之外对 a.py 进行 doctest。那么我应该如何重构模块以便我可以对它们进行 doctest 呢?

回溯(最后一次调用):
文件“web2py.py”,第 19 行,在 gluon.widget.start(cron=True) 文件“/home/.../web2py/gluon/widget.py”,第 796 行,在开始测试(options.test,verbose=options.verbose)文件“/home/.../web2py/gluon/shell.py”,第 326 行,在测试 doctest_object(name,obj)文件“/home/.. ./web2py/gluon/shell.py”,第 322 行,在 doctest_object 中 doctest_object(attr_name, o) 文件“/home/.../web2py/gluon/shell.py”,第 321 行,在 doctest_object 中 o = eval(' %s.%s' % (name, attr_name), globs) File "", line 1, in NameError: name ' class ' is not defined

4

1 回答 1

0

基于,我做了如下尝试。到目前为止它工作正常,但不确定这是否是最好的方法。在 private/ 文件夹中,创建一个文件 tests.py:

from gluon.shell import env
globals().update(env('webapp', import_models=True))

a = local_import('a')

import doctest
doctest.testmod(a, verbose=True)

此外,在 a.py 中,我根据this使用了 'import b' 而不是 'local_import(b)' 。

使用以下命令运行测试:

python web2py.py -S webapp --run applications/webapp/private/tests.py
于 2011-06-14T08:59:04.670 回答