クラスTestWebとtest_something()のような多くのメソッドを含むtest_web.pyというファイルがあります。
クラスのすべてのテストを次のように実行できます。
$ nosetests test_web.py
...
======================================================================
FAIL: checkout test
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/me/path/here/test_web.py", line 187, in test_checkout
...
しかし、個々のテストを実行することはできません。これらは、同じPWDで実行された場合、「No such test」エラーを示します。
$ nosetests test_web.py:test_checkout
$ nosetests TestWeb:test_checkout
ここで何が間違っているのでしょうか?
次のように指定する必要があります:nosetests <file>:<Test_Case>.<test_method>
、または
nosetests test_web.py:TestWeb.test_checkout
ドキュメント を参照してください
モジュールを指定することもできます:
nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users
他の回答が示唆するように、コマンドラインで名前を指定することは機能し、便利です。ただし、テストを作成している最中に、作業中のテストだけを実行したいことがよくあります。また、コマンドラインで記述する必要のある名前は、かなり長く面倒になります。 。そのような場合、カスタムデコレータとフラグを使用することを好みます。
wipd
( "work in progress decorator")を次のように定義します:
from nose.plugins.attrib import attr
def wipd(f):
return attr('wip')(f)
これは、装飾するオブジェクトにwip
属性を設定する@wipd
を定義します。例えば:
import unittest
class Test(unittest.TestCase):
@wipd
def test_something(self):
pass
その後、-a wip
をコマンドラインで使用して、テストの実行を@wipd
でマークされたものに絞り込むことができます。
この種の問題を回避するために、@wipd
ではなく@wip
という名前をデコレータに使用しています。
import unittest
class Test(unittest.TestCase):
from mymodule import wip
@wip
def test_something(self):
pass
def test_something_else(self):
pass
import
は、wip
デコレーターをクラスのメンバーにします。クラス内のallテストは選択されました。 attrib
プラグインは、テストメソッドの親クラスをチェックして、選択された属性がそこに存在するかどうかを確認し、attrib
によって作成およびテストされる属性は分離スペースに存在しません。したがって、-a foo
でテストし、クラスにfoo = "platypus"
が含まれている場合、クラス内のすべてのテストはプラグインによって選択されます。
複数の特定のテストを実行するには、コマンドラインにスペースで区切って追加するだけです。
nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout
私のテストでは、モジュール名でテストを指定しても機能しません
.py
への実際のパスを指定する必要があります。
nosetests /path/to/test/file.py:test_function
nose==1.3.7
でこれ