web-dev-qa-db-ja.com

nosetestsを使用してファイル内の単一のテストを指定するにはどうすればよいですか?

クラス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

ここで何が間違っているのでしょうか?

90
opstastic

次のように指定する必要があります:nosetests <file>:<Test_Case>.<test_method>、または

nosetests test_web.py:TestWeb.test_checkout

ドキュメント を参照してください

133
Will

モジュールを指定することもできます:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users
16
michaeljoseph

他の回答が示唆するように、コマンドラインで名前を指定することは機能し、便利です。ただし、テストを作成している最中に、作業中のテストだけを実行したいことがよくあります。また、コマンドラインで記述する必要のある名前は、かなり長く面倒になります。 。そのような場合、カスタムデコレータとフラグを使用することを好みます。

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"が含まれている場合、クラス内のすべてのテストはプラグインによって選択されます。

11
Louis

複数の特定のテストを実行するには、コマンドラインにスペースで区切って追加するだけです。

nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout
3
Skurpi

私のテストでは、モジュール名でテストを指定しても機能しません

.pyへの実際のパスを指定する必要があります。

nosetests /path/to/test/file.py:test_function

nose==1.3.7でこれ

0
surfer190