7

モジュールの doctests で、モジュールを完全な名前空間で参照したいと思います。たとえば、次のようになります。

  hp.myfunc(1)

そして、次のように書くことで、doctest が乱雑になるのを避けたいと思います。

  import healpy as hp

各ドキュメントテストで。

doctest.testmod を実行すると、globsキーワードを使用してこれを提供できることがわかりますが、nose を実行すると、setup関数を使用できます。

両方で機能する別の標準的な方法はありますか?

4

2 に答える 2

3

どのように doctests を実行していますか (つまり、ノーズなしで)? それらを実行しようとしたときにパッケージ ディレクトリに cd された場合、問題が発生します (つまり、フル インポートを実行している場合)。

私は、nosetests と組み込みの doctest runner の両方で実行される単純な doctest (完全に修飾されたインポートを含む) を取得することができました。これが私のセットアップです:

プロジェクトの構造:

.
└── mypackage
    ├── __init__.py
    └── mod.py

これが私の「mod.py」ファイルの内容です:

"""foo() providing module

Example:
    >>> import mypackage.mod
    >>> mypackage.mod.foo()
    'bar'
"""

def foo():
    return "bar"

から '。' ディレクトリ (プロジェクト ルート) で、テストを実行できるようになりました。

$ python -m doctest -v mypackage/*.py
1 items had no tests:
    __init__
0 tests in 1 items.
0 passed and 0 failed.
Test passed.
Trying:
    import mypackage.mod
Expecting nothing
ok
Trying:
    mypackage.mod.foo()
Expecting:
    'bar'
ok
1 items had no tests:
    mod.foo
1 items passed all tests:
   2 tests in mod
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

そして今ノーズテスト:

$ nosetests --with-doctest
.
----------------------------------------------------------------------
Ran 1 test in 0.008s

OK

「mypackage」ディレクトリ内から doctest を実行しようとすると、エラーが発生します (つまり、あなたのケースで何が起こっているのでしょうか)。

最後に、これで違いが生じるとは思いませんが、Python 2.7.2 を実行しています。

于 2011-10-14T01:43:33.220 に答える
2

鼻についてはわかりませんが、とでglobs引数を使用できます。testmod()testfile()

これは単純なモジュール (foobar.py と呼ばれる) です。インポートしないことに注意してくださいos

#!/usr/bin/python
"""
    >>> os.pipe
    <built-in function pipe>
"""

次のようにモジュールをテストできます (コンソールの例):

$ python2.7
Python 2.7.2 (default, Jun 29 2011, 11:10:00) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import doctest, foobar
2
>>> doctest.testmod(foobar)  ## will fail as expected because os has not been imported
**********************************************************************
File "foobar.py", line 2, in foobar
Failed example:
    os.pipe
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib/python2.7/doctest.py", line 1254, in __run
        compileflags, 1) in test.globs
      File "<doctest foobar[0]>", line 1, in <module>
        os.pipe
    NameError: name 'os' is not defined
**********************************************************************
1 items had failures:
   1 of   1 in foobar
***Test Failed*** 1 failures.
TestResults(failed=1, attempted=1)
>>> import os
>>> globs = {'os': os}
>>> doctest.testmod(foobar, globs=globs)
TestResults(failed=0, attempted=1)
>>> # Win :)

あなたの例は言うべきです:

globs = {'hp': healp}
于 2011-10-28T11:46:03.227 に答える