54933


# 環境

  * python 3.6.6
  * pytest 4.5.0

# 背景

pytestでテストコードを書いています。フォルダ構成は以下の通りです。

[code]

    tests/
     - test_api.py
     - utils_for_test.py
    
[/code]

utils_for_test.pyにはテストコードはありません。以下のクラスが存在します。

[code]

    
    class TestWrapper:
        """
        テスト用のUtils
        """
    
        def __init__(self, api):
            self.api = api
    
    
[/code]

# 質問

以下のコマンドでpytestを実行したら、以下の警告が発生しました。  
`pipenv run pytest tests -v --cov=src --cov-report=html`

[code]

    =============================================================================================== warnings summary ================================================================================================
    tests/utils_for_test.py:23
    tests/utils_for_test.py:23
      /home/vagrant/Documents/annofab-api-python-client/tests/utils_for_test.py:23: PytestCollectionWarning: cannot collect test class 'TestWrapper' because it has a __init__ constructor
        class TestWrapper:
    
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
    
    ----------- coverage: platform linux, python 3.6.6-final-0 -----------
    Coverage HTML written to dir htmlcov
    
[/code]

この警告はどのような意味でしょうか？  
またどうすれば解決できますか？

私は以下のように考えているため、なぜ「cannot collect test class 'TestWrapper'
」と言われているかが分かりませんでした。

  * `utils_for_test.py`はファイル名の先頭に`test`が付いていないので、テストコードとして実行されない
  * したがって 'TestWrapper'がテストクラスとして実行されなくて、特に問題ない

### 参考サイト

<https://docs.pytest.org/en/latest/warnings.html#internal-pytest-warnings>


CC BY-SA 4.0
2019-05-13T01:36:32.667
54921
2022-08-19T01:15:52.837
2022-08-19T01:15:52.837
3060
19524
question
python pytest
pytestで`PytestCollectionWarning`が発生する理由を教えてください


> `utils_for_test.py` はファイル名の先頭に`test`が付いていないので、テストコードとして実行されない

いいえ。  
pytestはデフォルトで、 `test_*.py` と `*_test.py` に一致するファイル名どちらもテスト用モジュールとして読み込みます。  
<https://docs.pytest.org/en/latest/goodpractices.html#test-discovery>


CC BY-SA 4.0
2019-05-13T14:29:31.320
54933
2019-05-13T14:29:31.320
806
54921
answer