2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pythonのテストやチェックツールで特定のコードを無視する方法

Last updated at Posted at 2021-03-18

はじめに

当稿は、すぐ忘れるスキップの記述を、すぐ思い出せるようにまとめたもの。

pythonの自動テストに関わるツール

プロジェクトで以下のツールを使っている。

  • pytest
    • メインのテスト
    • 実際に機能をテスト
  • autopep8
    • ソースをPEP8に準拠するように整形
    • 意外と役に立ってない印象
  • flake8
    • PEP8に準拠できてるかチェック
    • 100%準拠ではないとおもうが、結構これに従って作ってるだけできれいになる
  • mypy
    • 引数やクラスの互換に間違いがないかのチェック
    • プロジェクトではTypeHint(引数の明示的型指定)を指定してるので、その間違いをチェックしてくれる
  • bandit
    • セキュリティ的に問題あるかのチェック

たまにチェックが邪魔なときがある

  • pytest
    • 修正中とかで絶対テストコードがエラーになることが分かってるので、このケースはスキップしたいなど
  • flake8
    • flake8:「おまえのコード複雑過ぎ。シンプルにしろや」
      • 関数を分割したりと言うのがよくある対処
      • それでやると、「たったこれだけのことでメソッドつくるの?」となる事がよくある
  • bandit
    • bandit:「セキュリティ的にあかんのじゃ。なんとかしろや」
      • 「ここは絶対大丈夫なんで勘弁してほしい」というところがある
        • パフォーマンスチューニングで陥った経験あり

それぞれのスキップ方法

pytest

@pytest.mark.skip  # FIXME マルチスレッドでテストが落ちているのを一時的にskipしている
def test_success(self):
    """テスト

    """

スキップを示すアノテーションを指定することで、スキップできる。
後ろのコメントは、忘れないように習慣的にそう書いているだけ。

flake8

def foo(bar: Bar,  # noqa: C901, R701
        bar_bar: BarBar) -> str:
    """関数

    """

上記は、対象のメソッドでは、C901とR701のチェックをしないという意味。
単に# noqaとした場合は、flake8のチェック全てがされない。

bandit

def foo(bar: Bar,  # nosec
        bar_bar: BarBar) -> str:
    """関数

    """

上記は、対象のメソッドでは、banditのチェックをしないという意味。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?