使用单元测试避免不必要的导入

时间:2013-10-16 21:11:58

标签: python unit-testing python-2.7

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文档中找到任何内容,这让我想知道在同一个模块中进行单元测试是否是一个好主意。

1 个答案:

答案 0 :(得分:1)

PyCharm和Python社区都不鼓励在同一个文件中进行单元测试。 See the PyCharm tutorial on creating unit tests.如这些说明中所示,更好的单元测试方法是将它们放在具有“test_”前缀的单独文件中,可以通过内置的unittest模块或其他库自动发现和运行。

如果您在documentation for unittest下查看,您会发现已经有一个内置的测试发现系统,效果很好。

python -m unittest discover

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

相关问题