私は両方とも新しいですPythonとDjango=私はダイエット管理サイトを作成することで学んでいますが、ユニットテストを取得することで完全に敗北しました私が見つけたすべてのドキュメントとブログは、tests.pyから発見できる限り、tests.pyはmodels.pyと同じフォルダーにあり、テストクラスはTestCaseをサブクラス化するので、すべて自動的に取得されると述べています。 manage.py test <myapp>
を実行しても、テストが見つかりません。
すべてのテストを独自のパッケージで開始しましたが、tests.pyファイルにあるすべてのテストに簡略化しました。現在のtests.pyは次のようになります。
import unittest
from pyDietTracker.models import Weight
from pyDietTracker.weight.DisplayDataAdapters import DisplayWeight
class TestDisplayWeight(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def testGetWeightInStone_KG_Correctly_Converted(self):
weight = Weight()
weight.weight = 99.8
testAdapter = DisplayWeight(weight)
self.assertEquals(testAdapter.GetWeightInStone(), '15 st 10 lb')
Django TestCaseクラスもサブクラス化して試してみましたが、これも機能しませんでした。Django 1.1.1、Python 2.6とSnow Leopardを実行しています。
非常に基本的で明白な何かを見逃していると思いますが、どうしたらいいかわかりません。何か案は?
編集:コメント後の簡単な更新
INSTALLED_APPS = (
'Django.contrib.auth',
'Django.contrib.contenttypes',
'Django.contrib.sessions',
'Django.contrib.sites',
'Django.contrib.admin',
'pyDietTracker',
)
テストを実行するには、manage.py test pyDietTracker
を実行しています
うまくいきました。
私がやったことが分かったDjango-admin.py startproject pyDietTracker
だがしかし python manage.py startapp myApp
。戻ってこれを行った後、文書どおりに動作しました。 Djangoでの読書とサイトとアプリの違いについて多くを学ぶ必要があるようです。
S.LottとEmilStenströmにご協力いただきありがとうございます。両方ともたくさん助けられているので、両方の答えを受け入れられるといいのですが。
最も重要なレッスンテストはサイトレベルではなくアプリレベルでのみ動作します
私は同じ問題を抱えていましたが、私の問題は異なっていました。
Ran 0 tests
、OPとして。
ただし、テストクラス内のテストメソッドは、キーワードtest
で開始して実行する必要がありますです。
例:
from Django.test import TestCase
class FooTest(TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def this_wont_run(self):
print 'Fail'
def test_this_will(self):
print 'Win'
テストのファイルはtest
キーワードで始まる必要があります。
ユニットテストにyourapp/tests
パッケージ/スタイルを使用している場合は、そこに__init__.py
があることを確認してください(Pythonモジュール!).
特定のアプリのテストを実行できます。
python project/manage.py test app_name
しかし、私が走るとき
python project/manage.py test
0件のテストが見つかりました
Manage.pyと同じディレクトリでこれを実行する必要があることがわかります
解決策は、プロジェクトディレクトリに移動して実行することです
python manage.py test
これは、tests.pyに構文エラーがある場合にも発生します。
私の場合、def
の代わりにclass
と入力しました。の代わりに
class TestDisplayWeight(TestCase):
持っていた
def TestDisplayWeight(TestCase):
これは、tests.py
の代わりにtests
モジュールを使用している場合にも発生する可能性があります。この場合、すべてのテストクラスをテストモジュールの__init__.py
にインポートする必要があります。
tests/
__init__.py
somemodule.py
__init__.py
で、次のようにsomemodule
をインポートする必要があります。
from .somemodule import *
私の場合、アプリフォルダー自体に__init__.py
がありませんでした。これにより、テストはpython manage.py test project.app_name
で実行されますが、python manage.py test
では実行されません。
project/
app_name/
__init__.py # this was missing
ここにもう1つあります。テストファイルが実行可能でないことを確認してください。私のvirtualboxはそれらを実行可能ファイルとして自動マウントしたので、テスト発見はそれらを完全に逃しました。誰かが問題の回避策を教えてくれる前に、それらを関連する__init__.py
ファイルに追加しなければなりませんでしたが、今では削除され、実行不能ですべてが_just_worksになりました。
同じDjango appディレクトリにtest.pyファイルとtest /サブディレクトリがある場合、これが発生しました。python =または、テストモジュール(test.py)またはテストパッケージ(test/subdir)のどちらを探しているかを問わず、テストランナー。
私の場合、test _で関数名を開始できず、テストを次のように実行すると失敗します。
python manage.py test myapp
結果は:
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Destroying test database for alias 'default'...
Djangoはテストを認識できません!
次に、myproject/myapp/test.pyファイルを次のように変更します。
from Django.test import TestCase
# Create your tests here.
class apitest(TestCase):
def test_email(self):
pass
def test_secend(self):
pass
結果は次のとおりです。
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 2.048s
OK
Destroying test database for alias 'default'...
この構文を使用する
python manage.py test
の代わりに ./manage.py test
はこの問題を解決してくれました。
メインアプリ(my_app/my_app /など)でテストを実行しようとしている場合は、以下を確認してください。
settings.py
内のINSTALLED_APPSにリストされていますDATABASES['default']
内のsettings.py
が適切に設定されていることを確認してくださいmodels.py
があります(使用していない場合でも、少なくとも1つ空いている必要があります)https://docs.djangoproject.com/en/1.11/topics/testing/overview/ を参照してください
テストが実行されない最も一般的な理由は、設定が正しくなく、モジュールがINSTALLED_APPSにないことです。
を使用しております Django.test.TestCase
の代わりに unittest.TestCase
。 Client
がバンドルされています。
https://docs.djangoproject.com/en/1.11/topics/testing/tools/#Django.test.TestCase
--help
を実行し、詳細を探します。クランクを最大にします。
manage.py test --verbose
を実行すると、このデバッグ出力が一番上にありました。
>nosetests --with-spec --spec-color --verbose --verbosity=2
。
ほら! nosetests
をインストールして忘れていました。そして、--verbosity=2
と表示されます。私は3が最大であり、3でそれを実行することがわかりました、私はこれらの多くを見つけました:
nose.selector: INFO: /media/sf_C_DRIVE/Users/me/git/Django/app/tests/test_processors.py is executable; skipped
それは私に正しいヒントを与えました。実際、xビットが設定されているファイルには問題があります。しかし、いくつかのテストを実行したため、テストをスキップすることを明示的に言っていたにもかかわらず、私はコースから外れました。 VMでテストを実行し、Windows NTFSディスクを共有しているため、ビットを変更することはできません。したがって、--exe
を追加すると修正されました。
同じファイルにSAME NAMEの2つのテストクラスがありましたが、もちろんすべてのテストを実行できませんでした。
テストクラスにrun
というメソッドを作成しましたが、これは非常に悪い考えでした。 Pythonテストを実行したかったが、実行できなかったことがわかりました。この問題は少し異なりますが、結果は同じです-テストが見つからなかったように見えました。
次のメッセージが表示されたことに注意してください。You want to run the existing test: <unittest.runner.TextTestResult run=0 errors=0 failures=0>