3

PyCharm IDEでは、クラスが存在するのと同じモジュールで単体テストを作成することが推奨されます。開発中にすべてのモジュールが自動的にテストされるというアイデアは気に入っていますが、気になるのは、これらの単体テストにのみ使用される追加のインポートがあることです。私は一緒に暮らすことができますがimport unittest、考慮してください:

from lxml import etree


class Foobar(object):
    def __init__(self):
        schema_root = etree.parse("schema/myschema.xsd")
        schema = etree.XMLSchema(schema_root)
        self.parser = etree.XMLParser(schema=schema)

    def valid(self, filename):
        try:
            etree.parse(filename, self.parser)
            return True
        except etree.XMLSyntaxError:
            return False


import unittest
from io import StringIO


class _FoobarTest(unittest.TestCase):
    def test_empty_object_is_valid(self):
        foobar = Foobar()
        self.assertTrue(foobar.valid(StringIO("<object />")))

私は代わりにこのようにすることを考えました:

class _FoobarTest(unittest.TestCase):
    from io import StringIO as StringIO_

    def test_empty_object_is_valid(self):
        foobar = Foobar()
        self.assertTrue(foobar.valid(self.StringIO_("<object />")))

しかし、それは私にはあまり自然に感じられません。Python はベスト プラクティスを重視する言語であるため、これについて何らかの公式声明はありますか?これに関する PEP ドキュメントには何も見つかりませんでした。そのため、同じモジュールで単体テストを行うのが良い考えなのかどうか疑問に思いました。

4

1 に答える 1

1

PyCharm も Python コミュニティも、単体テストを同じファイルに含めることを推奨していません。単体テストの作成に関する PyCharm チュートリアルを参照してください。これらの手順で示されているように、単体テストを実行するより良い方法は、"test_" プレフィックスが付いた個別のファイルにそれらを配置することです。これは、組み込みの unittest モジュールまたは他のライブラリの両方によって自動的に検出および実行されます。

unittest のドキュメントを見てみると、うまく機能するテスト検出用の組み込みシステムが既にあることがわかります。

python -m unittest discover

現在のディレクトリでパターン「test*.py」に一致するすべてのテストを検索します。これは組み込みのデフォルトであり、何か他のものが必要になるまでのベスト プラクティスです。

于 2013-10-18T23:46:46.477 に答える