ADHDエンジニアのL2キャッシュ

ADHDの能力を駆使して自由な発想を落としていくよ

PyCharmでunittestが実行できない

Python3をインストールしたので早速IDEでTDD回して気前よく開発を始めようと思ったのですが、派手にころんだのでまとめます。

迷子の迷子のテストさん

まず始めに作った階層はJavaに似せてこんな感じ。

auto-trade/
+- main
    +- __init__.py
    +- DailyPrice.py
+- tests
    +- __init__.py
    +- TestDailyDrice.py

__init__.pyというファイルを置くとパッケージとして認識されるそうな

その結果こんなエラーが

ModuleNotFoundError: No module named '/Users/ksilver/PycharmProjects/auto-trade/test/TestDailyDrice'

なんだこれは、テストでコケるならまだしもモジュールが見つからない???

実行環境おかしいんじゃね?

とりあえずIDEの設定を確認しようそうしよう。

Projectの設定はProjectを右クリックしたメニューから……無いじゃん!!!

仕方なくPrefereneceから辿って設定に行き着きました。

もうちょっとマシな辿り着き方ないんですかね。。。。

設定を見ても正しくPython3.6が指定されている模様。

コマンドで叩いてみる

ググったら良い記事が合ったので採用

adtech-blog.united.jp

これをもとにコマンドを叩いてみます。(たんたかたーん)

kMBA:auto-trade ksilver$ python3 -m unittest tests.TestDailyPrice
E
======================================================================
ERROR: TestDailyPrice (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: TestDailyPrice
Traceback (most recent call last):
  File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 153, in loadTestsFromName
    module = __import__(module_name)
ModuleNotFoundError: No module named 'tests.TestDailyPrice'


----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)

なんだろう、怒られてしまいましたぞ。

そんなモジュールねぇってさ。わけがわからないよ

本家を参照してみる

これは一旦本家ドキュメントに立ち返るしか無い

26.4. unittest — ユニットテストフレームワーク — Python 3.6.1 ドキュメント

ファイルもルート直下に移動してテストコードをコピーして実行

kMBA:auto-trade ksilver$ python3 -m unittest TestDailyDrice.py 
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

おおお動いた!!!

しかしPyCharmでは相変わらず動かない。

PyCharmで動かないのはなぜ?

実行ログをを良く確認する。

FAILED (errors=1)
Launching unittests with arguments python -m unittest /Users/ksilver/PycharmProjects/auto-trade/TestDailyDrice.py in /Users/ksilver/PycharmProjects/auto-trade/main

ん?実行ディレクトリがなんかおかしくね?なんでmainで実行してるんだ?

一旦全てのディレクトリを消し去って構成をフラットにしてリトライすると実行すらできませんでした。

Error running Unittests in TestDailyDrice.py: Cannot start process, the working directory '/Users/ksilver/PycharmProjects/auto-trade/main' does not exist

なんか勝手にworking directoryと言うものが設定されているようです。

しゃーなしなので全ファイルをmain直下に移して実行するとうまくいきました。

結論

PyCharmではプロジェクト直下にソースコードを置いてはいけないようです。

次のような構成にしたらうまく動きますよ。というお話

root/
+- main/
    +- product.py
    +- test/
        +- test_code.py