2017-07-25 11 views
0

いいですから、私はPython Crash Courseエクササイズをユニットテストの章にしています。PyCharmを使って動作させることはできません。PyCharmのユニットテスト

私の "プロジェクト"、文字通り2つのささいなファイルで構成されています

city_functions.py:

def city_country(city, country): 
    result = '{0}, {1}'.format(city.title(), country.title()) 
    return result 

test_cities.py:

import unittest 
from city_functions import city_country 


class CityTestCase(unittest.TestCase): 
    """Tests for 'city_functions.city_country' function.""" 

    def test_city_country(self): 
     result = city_country('london', 'england') 
     self.assertEqual(result, 'London, England') 

unittest.main() 

さて、私が実行しようとしていますとき、 PyCharmのモジュール:

しかし、私は、コマンドラインから実行するときには、動作します:

> python -m test_cities 
. 
---------------------------------------------------------------------- 
Ran 1 test in 0.000s 

OK 

は、それが動作するように取得するPyCharm構成を持つ任意のペテンはありますか?私は命名規則に関するいくつかの記事を読んだことがあります(テスト関数とモジュール全体は 'test'で始まらなければなりませんが、私の場合はすでにそうです)。

+0

はい、間違いなくいくつかのユニットテストを実行しようとしたときにあなたがする必要がある設定があります。ステップバイステップの指示を与えるのは難しいです。 [help](https://www.jetbrains.com/help/pycharm/run-debug-configuration-unittests.html)をよく読んで設定メニューを見て、利用できるオプションを確認してください。あなたが 'python -m test_cities'コマンドを実行している*場所を見て、これが動作するのに使われている相対パスを理解してください。 – idjaw

+0

最終的には、あなたの設定では、アプリの主な実行場所となる「作業中の」ディレクトリとインポートがどこから来るかを判断する必要があります。 – idjaw

答えて

1

は、実際に(それがPyCharmとコマンドラインからの作品)主なチェックが問題を解決追加:

(...) 
if __name__ == '__main__': 
    unittest.main() 
+0

@JediなぜPyCharmがメインチェックを必要としたのか分かりません –

+0

-m引数を正しく理解すると、モジュールが__main__モジュールとして実行されることが保証されます。ターミナルからは、このモジュールを "python test_cities.py"のように動かすことができました。 PyCharmを "クリック"するには、 "unittest.main()"行を削除する必要がありましたが、端末は動作を停止しました。だから、私はちょうどメインチェックを追加しました - なぜこの行がPyCharmの動作に影響を与えたのか分かりません。 –