こんにちは、高知からリモートインターンしている森田ドラゴンです。前回はXMLをJSONにパースする方法を調べました。今日は、テストとコードの解説文を作るために、pydocとpytestを触りました。pytestはpythonのテストフレームワークの一つで、pydocはソースコードに直接関数の仕様を書き込んで、他のファイルに出力する、ドキュメント生成ツールです。
pytest / ローカルファイルがimportできない
pytestはとりあえず写経をして、動くかどうか試しました。チュートリアル通りに書きましたが、一つだけ" main というモジュールは存在しません " と、エラーがでました。解決策を調べると、”パスが通っていないから” ”__init__.pyファイルが定義されていないから” とありました。
上の二つの解決策を試しましたが、動作しませんでした。
from main.calc import Calc
上記のコードは、 main フォルダ ( 正確にはmain モジュール )の calcの中の Calcクラスをimportする。というコードです。 今考えると、階層が下記のようになっていたので、 ../main.calc と書けばよかったのかもしれません。このエラーは同じ階層にテストコードとソースコードを書くことで、解決しました。
study_pytest/
|- main/calc.py
|-tests/test_calc.py
pydoc / コードにそのまま書き込む
pydocは「コードにそのまま説明を書き込む」という話を聞いていました。それに対して、「ソースコード長くなりそうだけど、どうやるんだろう」と疑問を持っていました。
結論からいうと、そのままソースコードに書くだけでした。
"""
足し算をおこなう
parameters
------
self : int
内部引数 a
b
配列の場合はlist of int
return
-------
a と bを足した数を返す
"""
上記は例ですが、""" 3つのダブルクォーテンションで囲み、関数の仕様を書き込みます。コードが長くなるように感じましたが、後からリファクタリングすることや、他の人が見ることを考えると、逆にこちらのほうがみやすいみたいです。
仕様の書き方は自由ですが、今回は Parameter と Returnを定義して、仕様を書くことにしました。
感想
pydoc と pytestの使い方がなんとなくわかったので、最後の方は開発をしていました。とりあえず関数を一つ作ろうとして、 urllibライブラリの仕様と、try catch でのエラーの対応に時間がかかっています。urllibは使うだけなので、調べればでそうですが、try catch はエラーの内容を把握する必要があるので、試しながら進む必要がありそうです。