【问题标题】:Web2py Modules and DoctestsWeb2py 模块和文档测试
【发布时间】:2011-09-14 11:40:12
【问题描述】:

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

我知道这是因为“-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) 文件 "", 第 1 行,在 NameError: name 'class' 未定义

【问题讨论】:

    标签: web2py doctest web2py-modules


    【解决方案1】:

    基于this,我做了如下尝试。到目前为止它工作正常,但不确定这是否是最好的方法。在 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)
    

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

    使用以下命令运行测试:

    python web2py.py -S webapp --run applications/webapp/private/tests.py
    

    【讨论】:

    • 此外,从最近发布的 1.96.x 版本开始,您根本不再需要使用 local_import ——您可以使用常规导入语句,甚至来自模型和控制器。
    • @Anthony 感谢您提供非常有用的信息。更多信息:groups.google.com/group/web2py/browse_thread/thread/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多