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 的文档,您会发现已经有一个用于测试发现的内置系统,效果很好。

python -m unittest discover

将在当前目录中找到与模式“test*.py”匹配的所有测试。这是内置的默认值,也是最佳实践,直到您需要其他东西。

于 2013-10-18T23:46:46.477 回答