これは、発見用のnose2プラグインと、テストを装飾できるattrib
nose1プラグインからコピーされたいくつかのコードを使用して、nose2で機能するようになりました。attrib
ノーズ 2attrib
プラグインの使用
あなたは、nose2attrib
プラグインがカスタム属性をテスト関数とクラスで定義できることを確認できます。
これを機能させるには、テスト関数を定義した後にテストの属性を指定する必要があります。
class MyTestCase(unittest.TestCase):
def test_function(self):
self.assertEqual(1+1, 2)
test_function.custom_attr1 = True
test_function.custom_attr2 = ['foo', 'bar']
次に、コマンド ライン引数として-A
orを指定して、一連のフィルター処理されたテストを実行し、テスト スイートと照合する属性を一覧表示できます。テスト属性を一致させるためのより複雑な Python 式を許可するorの式コマンドライン引数を使用することもできます。--attribute
nose2
-E
--eval-attribute
たとえば、真の値で指定されたnose2 -v -A custom_attr1
すべてのテストを実行します。custom_attr1
デコレーターを使用してテスト属性を指定する
ただし、定義後にテストでこれらの属性を定義するという考えが気に入らなかったため、これは私にとっては十分ではありませんでした。代わりにデコレータを使用したかったのnose2
ですが、これを行うための組み込みのデコレータがありませんでした。
プラグインのnose1ソースコードattrib
に行き、関数のソースをコピーしましたattr
。
def attr(*args, **kwargs):
"""Decorator that adds attributes to classes or functions
for use with the Attribute (-a) plugin.
"""
def wrap_ob(ob):
for name in args:
setattr(ob, name, True)
for name, value in kwargs.iteritems():
setattr(ob, name, value)
return ob
return wrap_ob
test/attrib_util.py
これをファイルに入れました。代わりにデコレータを使用して属性を指定できるようになりました。上記の元のテスト クラス コードは、(IMO) に簡単に変換できます。
from test.attrib_util import attr
class MyTestCase(unittest.TestCase):
@attr('custom_attr1', custom_attr2=['foo', 'bar'])
def test_function(self):
self.assertEqual(1+1, 2)
属性は args または kwargs として指定できることに気付くでしょう。すべての引数は、デフォルト値の を取得しますTrue
。
このデコレーターをテスト クラスまたは基本クラスで使用することもできattr
、属性は内部で定義されたすべてのテスト関数に適用されます。これにより、単体テストと機能テストを非常に簡単に分離できます。
from test.attrib_util import attr
@attr('functional')
class FunctionalTestCase(unittest.TestCase):
pass
class MyFunctionalCase(FunctionalTestCase):
def test_function(self):
print 'this will be considered a "functional" test function'