PyCharm IDE鼓励我在我的类(class)所在的同一模块中编写单元测试。我喜欢在我开发时自动测试每个模块的想法,但令我困扰的是我有额外的导入仅用于这些单元测试。我可以接受 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 文档中找到关于此的任何内容,这让我想知道在同一模块中进行单元测试是否是个好主意。
最佳答案
PyCharm 和 Python 社区都不鼓励在同一文件中进行单元测试。 See the PyCharm tutorial on creating unit tests.如这些说明中所示,进行单元测试的更好方法是将它们放在带有“test_”前缀的单独文件中,内置的单元测试模块或其他库可以发现并自动运行这些文件。
如果你看下 documentation for unittest您会发现已经有一个内置的测试发现系统,效果很好。
python -m unittest discover
将在当前目录中找到与模式“test*.py”匹配的所有测试。这是内置的默认设置,也是最佳实践,直到您需要其他东西为止。
关于python - 通过单元测试避免不必要的导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19413988/