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文档中找到任何内容,这让我想知道在同一个模块中进行单元测试是否是一个好主意。
答案 0 :(得分:1)
PyCharm和Python社区都不鼓励在同一个文件中进行单元测试。 See the PyCharm tutorial on creating unit tests.如这些说明中所示,更好的单元测试方法是将它们放在具有“test_”前缀的单独文件中,可以通过内置的unittest模块或其他库自动发现和运行。
如果您在documentation for unittest下查看,您会发现已经有一个内置的测试发现系统,效果很好。
python -m unittest discover
将找到与当前目录中的模式“test * .py”匹配的所有测试。这是内置的默认值,也是最佳做法,直到您需要其他内容。