クラス、メソッド、または関数名をアンダースコアで開始するだけで、noseはそれを無視します。
@nottest
用途はありますが、クラスが相互に派生している場合はうまく機能せず、一部の基本クラスはnoseによって無視される必要があります。これは、テストする一連の同様のDjangoビューがある場合によく発生します。多くの場合、テストが必要な特性を共有しています。たとえば、特定の権限を持つユーザーのみがアクセスできます。それらすべてに対して同じ権限チェックを作成するのではなく、他のクラスが派生する初期クラスにそのような共有テストを配置します。ただし、問題は、基本クラスが後のクラスによって派生するだけであり、それ自体で実行されることを意図していないことです。問題の例を次に示します。
from unittest import TestCase
class Base(TestCase):
def test_something(self):
print "Testing something in " + self.__class__.__name__
class Derived(Base):
def test_something_else(self):
print "Testing something else in " + self.__class__.__name__
そして、その上で鼻水からの出力:
$ nosetests test.py -s
Testing something in Base
.Testing something in Derived
.Testing something else in Derived
.
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
クラスはBase
テストに含まれています。
階層全体をマークするので、平手打ち@nottest
することはできません。Base
実際、@nottest
上記のコードの前に追加するだけでclass Base
は、noseはテストを実行しません。
基本クラスの前にアンダースコアを追加します。
from unittest import TestCase
class _Base(TestCase):
def test_something(self):
print "Testing something in " + self.__class__.__name__
class Derived(_Base):
def test_something_else(self):
print "Testing something else in " + self.__class__.__name__
そして実行するときそれ_Base
は無視されます:
$ nosetests test3.py -s
Testing something in Derived
.Testing something else in Derived
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
この動作は十分に文書化されていませんが、テストを選択するコードは、クラス名の先頭でアンダースコアを明示的にチェックします。
同様のテストが関数名とメソッド名に対してnoseによって実行されるため、名前の先頭にアンダースコアを追加することでそれらを除外できます。