2021-01-25

  • テストの方針

    • image
    • テスト対象をmainに入れるとか色々な流儀があるみたいだけど、Herokuにデプロイする上での公式ドキュメントに合わせてこの構造にしてるのでテストのために変えたくはない
    • rootでpython -m pytest
      • see -m pytest
      • カレントディレクトリがsys.pathに入るのでテストコードからfrom server.keicho import process_commandとかできる、素直
    • ipythonで%run tests/test_foo.pyもできる
      • まとめて呼ぶ時はテストランナーでもいいけど、デバッグする時にはデバッガ使いたいからね
    • python -m pytest tests/test_foo.pyで個別テストファイルを試して、ひと段落ついたら全部走らせる
      • サーバを叩くテストケースは重いし、そもそも手元の修正をデプロイしない限りサーバの挙動は変わらないはずだからね
  • テストの方針の2をやったら予期しない振る舞いをして混乱、原因究明のために3, 4とテストしながら掘り下げて行った

    • 結論、移植の時に入れたバグ
    • 「なぜかコマンドに対してもキーワード抽出が走ってしまう」
    • テストなしでリファクタして挙動が変わるミス
  • テストの安定性

    • ランダム要素はないはずだったが「スコア最大のものを選ぶ」という処理で同じスコアになるケースがあった
      • 優先したい方に少しだけ下駄をはかせる形にした
  • VSCodeでカバレッジ表示

  • VSCodeでpytestの設定