この辺を参照してみた。
とりあえずハマったところ
Pipenvの dev-package に書いたので、インストール忘れた
pipenv install --dev
するのを忘れてはいけない(戒め)
ディレクトリ構成
[06/08 20:42:19] $ tree (git)-[master] . ├── PipFile ├── Pipfile.lock ├── src │ └── script.py └── tests ├── __init__.py └── test_script.py
自分のローカルは最終的にこうなっているのだが、途中まで何度やっても下記エラーが出続けた。
[06/06 22:29:10] $ pipenv run pytest (git)-[master] ================================================= test session starts ================================================== platform darwin -- Python 3.7.3, pytest-4.6.2, py-1.8.0, pluggy-0.12.0 rootdir: /Users/yumechi/python_practice/study/pre-commit plugins: mock-1.10.4 collected 0 items / 1 errors ======================================================== ERRORS ======================================================== ________________________________________ ERROR collecting tests/test_script.py _________________________________________ ImportError while importing test module '/Users/yumechi/python_practice/study/pre-commit/tests/test_script.py'. Hint: make sure your test modules/packages have valid Python names. Traceback: tests/test_script.py:3: in <module> from src import script E ModuleNotFoundError: No module named 'src' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! =============================================== 1 error in 0.14 seconds ================================================
要はモジュールインストールに失敗しているのだが、これ tests/__init__.py
がないことが原因だったらしい。てかなんで必要なんだ…? みたいなことを思ったが、これを足したら正しくテストが回るようになった。むずい。環境は3系を使っているので、必要ないと思っていた。
どうやら、この記事を見た限りでは、様々なユースケースに対応するため必要になるらしいということを理解した。(むずい)
リファレンスされてる記事はこれ。
ともあれ、 __init__.py
を配置することでテストは無事に回るようになった。よし。
まとめと展望
pytest が動くようになったので、テスト駆動開発もこれで可能になりました。ということで。
最近自分自身のコードに対して感じていることとして、テスト不可なモジュール分割をしている可能性があるという可能性があり、インプット・アウトプットを変更することなくリファクタリングできました! ということが難しい状況が存在している。なので、失敗していないこと・影響していないことを保証しつつ、コードを改善していくことが難しいのである。(プログラミングスキルを上げるためには、そろそろこのあたりを自分自身で完結して出来なければいけない)。
テスト設計とか、ユニットテスト入門みたいな本を読み漁りつつ、もう少し良いコードを書けるようコード設計を考えていかなければいけないなあというのをしばらくの課題としてみたいと思った。