python - 通过单元测试避免不必要的导入

标签 python unit-testing python-2.7

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/

相关文章:

python - 获取每日最大值会产生奇怪的结果

python - 如何抑制 "invalid value encountered in double_scalars"消息?

Python、TOR、请求 - 'module' 对象没有属性 'inet_pton'

python - 线程在 python 脚本中不并行运行

python - 如何从 Python 列表中删除重复的字典?

python-2.7 - GStreamer Python 错误 : 'gst.ElementNotFoundError: videoconvert'

python - 使用 pandas 和 sqldf 没有这样的表错误

php - PHPUnit 和数据提供者的问题

ios - 如果编译时间超过可接受的水平,我可以创建一个失败的单元测试吗?

javascript - 如何对具有内部依赖项的 ES6 模块进行单元测试