nosetestsを含むファイルで単一のテストを指定するにはどうすればよいですか?


102

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

ここで何が悪いのでしょうか?


テストケースまたはSSCCEを投稿できない限り、あなたを助けることはできません、私は私のマシンでnoseで使用した構文を試しましたが、うまくいきました
Jeff Tratner、2012

回答:


148

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

nosetests test_web.py:TestWeb.test_checkout

ドキュメントを見る


6
なぜ地球の図書館は「。」の代わりに「:」を使うのですか?;)
omikron

2
モジュールとクラスを簡単に区別できるようにするためでしょうか?
クリス

@omikronファイルを指定したとき、インポートエラーはありませんでした
gabeio

2
うわー、それはひどい、古典的なpythonライブラリーであり、既存のインターフェースを気にしない
Dagrooms

16

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

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users

1
Pythonのバージョンが違うのかどうかはわかりませんnosetestsが、その構文は失敗します。何の仕事を、しかし、次のとおりですnosetests tests/test_integration:IntegrationTests.test_user_search_returns_users、という意味-使用して、いないPythonモジュール、ファイルなどの参照ファイル/ではなく.
dwanderson

1
@dwanderson両方の使用法が機能するはずです(nose.readthedocs.io/en/latest/usage.html#selecting-testsを参照)。あなたの失敗はtestsあなたのセットアップのモジュールではないことが原因である可能性がありますか?
michaeljoseph 2017年

1
ああ、そうだ__init__.pytestsディレクトリに忘れていた。よくやった!ありがとう
dwanderson

11

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

私は次のように定義しますwipd(「作業中のデコレータ」):

from nose.plugins.attrib import attr
def wipd(f):
    return attr('wip')(f)

これは、装飾@wipdするwipオブジェクトに属性を設定するデコレータを定義します。例えば:

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デコレータメンバークラスの、および全てのクラスのテストが選択されます。attribプラグインのチェック選択した属性があまりにも存在する、とによって作成され、テストされた属性があれば試験方法の親クラスを参照するにはattrib分離した空間には存在しません。したがって、でテストし-a foo、クラスにが含まれているfoo = "platypus"場合、クラス内のすべてのテストはプラグインによって選択されます。


3

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

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

0

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

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

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

これで nose==1.3.7


0

私の要件は、別のWindowsディレクトリにあるテストファイルで単一のテストを実行することでした。これは、anacondaコマンドプロンプトから次のように実行されました。

からのnosetestsを実行しました:

(base) C:\Users\ABC\Documents\work\

しかし、test_MyTestFile.pymethodsFile.pyは次の場所にあります:

 (base) C:\Users\ABC\Documents\work\daily\

次のように引用符付きのパス含めることにより単一のテストを実行します。

(base) C:\Users\ABC\Documents\work>nosetests "daily\\test_MyTestFile.py:MyTestClass.test_add_integers"

test_MyTestFile.pyは次のようになります。

import methodsFile
import unittest

class MyTestClass(unittest.TestCase):

    def test_add_integers(self):
        assert methodsFile.add(5, 3) == 8

    def test_add_integers_zero(self):
        assert methodsFile.add(3, 0) == 3

methodsFile.pyは次のようになります。

def add(num1, num2):
        return num1 + num2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.