Test/functionalディレクトリに多数のテストを含むPylons 1.0アプリがあります。奇妙なテスト結果が出ているので、1つのテストを実行したいだけです。ノーズのドキュメントには、コマンドラインでテスト名を渡すことができるはずであると書かれていますが、何をしてもインポートエラーが発生します
例えば:
nosetests -x -s sometestname
与える:
Traceback (most recent call last):
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.Egg/nose/loader.py", line 371, in loadTestsFromName
module = resolve_name(addr.module)
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.Egg/nose/util.py", line 334, in resolve_name
module = __import__('.'.join(parts_copy))
ImportError: No module named sometestname
同じエラーが表示されます
nosetests -x -s appname.tests.functional.testcontroller
正しい構文は何ですか?
nosetests appname.tests.functional.test_controller
は機能するはずです。ファイルの名前はtest_controller.py
です。
特定のテストクラスとメソッドを実行するには、module.path:ClassNameInFile.method_name
という形式のパスを使用します。つまり、コロンを使用してモジュール/ファイルパスとファイル内のオブジェクトを区切ります。 module.path
は、ファイルへの相対パスです(例:tests/my_tests.py:ClassNameInFile.method_name
)。
Nosetests 1.3.0を使用している私にとって、これらのバリアントは機能しています(ただし、__init__.py
あなたのテストフォルダ内):
nosetests [options] tests.ui_tests
nosetests [options] tests/ui_tests.py
nosetests [options] tests.ui_tests:TestUI.test_admin_page
モジュール名とクラス名の間に単一のコロンがあることに注意してください。
「.py」ファイル拡張子を追加する必要があります。つまり、
r'/path_to/my_file.py:' + r'test_func_xy'
これは、ファイルにクラスがないためかもしれません。 .py
がなければ、鼻は不平を言っていました。
ファイル/ path_to/my_fileに呼び出し可能なtest_func_xyが見つかりません:ファイルはpythonモジュールではありません
そして、これはフォルダー__init__.py
に/path_to/
がありますが。
次は私のためにうまくいった:
nosetests test_file.py:method_name
私のテストはクラスではないことに注意してください。テストメソッドは単一のファイルに含まれていました。
以前の回答に基づいて、この小さなスクリプトを作成しました。
#!/usr/bin/env bash
#
# Usage:
#
# ./noseTest <filename> <method_name>
#
# e.g.:
#
# ./noseTest test/MainTest.py mergeAll
#
# It is assumed that the file and the test class have the _same name_
# (e.g. the test class `MainTest` is defined in the file `MainTest.py`).
# If you don't follow this convention, this script won't work for you.
#
testFile="$1"
testMethod="$2"
testClass="$(basename "$testFile" .py)"
nosetests "$testFile:$testClass.test_$testMethod"