5

nose.tools を使用して pylint を満足させる正しい方法は何ですか?

次のコード:

'''
This is a test
'''

import nose.tools
import nose.tools.trivial

nose.tools.assert_equal(1, 1)
nose.tools.assert_equals(1, 1)

nose.tools.trivial.assert_equal(1, 1)
nose.tools.trivial.assert_equals(1, 1)

次の pylint エラーが発生します。

$ pylint -i y -r n /tmp/aseq.py
************* Module aseq
E1101:  8,0: Module 'nose.tools' has no 'assert_equal' member
E1101:  9,0: Module 'nose.tools' has no 'assert_equals' member
E1101: 11,0: Module 'nose.tools.trivial' has no 'assert_equal' member
E1101: 12,0: Module 'nose.tools.trivial' has no 'assert_equals' member

もちろん、E1101 を無効にすることもできますが、よりクリーンな方法はありますか?

4

5 に答える 5

4

E1101 を無効にする代わりに、次のように記述します。

ignored-classes=nose.tools,nose.tools.trivial

.pylintrc の[TYPECHECK]セクションの下。

pylint docにあるように、このオプションは「属性が動的に設定されたクラスに役立ちます」。

于 2013-06-18T06:27:25.120 に答える
2

nose.tools.trivialunittest.TestCaseオンザフライでクラスを単純に検査し、またはassertから始まるすべての「パブリック」メソッドを作成します。nose.toolsnose.tools.trivial

鼻/ツール/__init__.py:

from nose.tools.nontrivial import *
from nose.tools.nontrivial import __all__ as nontrivial_all
from nose.tools.trivial import *
from nose.tools.trivial import __all__ as trivial_all

__all__ = trivial_all + nontrivial_all

鼻/ツール/trivial.py:

...

class Dummy(unittest.TestCase):
    def nop():
        pass
_t = Dummy('nop')

for at in [ at for at in dir(_t)
            if at.startswith('assert') and not '_' in at ]:
    pepd = pep8(at)
    vars()[pepd] = getattr(_t, at)
    __all__.append(pepd)

...

Pylint は、この「ハッキーな」動作を処理できません。

andnose.tools.eq_の代わりに使用することを検討してください(これらのメソッドは実際には同じです)。それが役立つことを願っています。assert_equalassert_equals

于 2013-06-17T21:03:42.827 に答える
1

Pylint は、鼻の根底にある魔法を理解していません。提案されているように、解決策には、E1101 を無効にするか、関連するクラスを無視することが含まれます。しかし、最善の方法は、 Pylintが把握していない API の部分の簡単な説明をpylint-brain プロジェクトに提出することで、pylint-brain プロジェクトに貢献することです。これは、そこにあるドキュメントと例から非常に簡単なはずです。

于 2013-06-18T07:19:54.293 に答える