【问题标题】:Where to import libraries in unit tests ? Python在单元测试中在哪里导入库? Python
【发布时间】:2016-10-26 02:32:51
【问题描述】:

我必须写一个这样的测试文件:

import unittest

from mylibrary import some_crazy_func

class TestSomething(unittest.TestCase):
    def test_some_crazy_func_that_needs_io_open(self):
        # Opens file
        # Calls function
        # assert outputs

但我不确定应该导入库的“pythonic 位置”在哪里(比如说io)。

是否应该在顶部:

import io
import unittest

from mylibrary import some_crazy_func

class TestSomething(unittest.TestCase):
    def test_some_crazy_func_that_needs_io_open(self):
         expected = ['abc', 'def', 'xyz']
         with io.open('somestaticfile.txt', 'r') as fin:
             outputs = [some_crazy_func(line) for line in fin]
         assert outputs == expected

或者在TestCase的函数内:

import unittest

from mylibrary import some_crazy_func

class TestSomething(unittest.TestCase):
    def test_some_crazy_func_that_needs_io_open(self):
         import io
         expected = ['abc', 'def', 'xyz']
         with io.open('somestaticfile.txt', 'r') as fin:
             outputs = [some_crazy_func(line) for line in fin]
         assert outputs == expected

还是在TestCase函数之前和对象初始化时:

import unittest

from mylibrary import some_crazy_func

class TestSomething(unittest.TestCase):
    import io
    def test_some_crazy_func_that_needs_io_open(self):
         expected = ['abc', 'def', 'xyz']
         with io.open('somestaticfile.txt', 'r') as fin:
             outputs = [some_crazy_func(line) for line in fin]
         assert outputs == expected

【问题讨论】:

  • 我不能说这是最好的方法,但几年前我问了一个类似的问题,这就是我如何导入单元测试stackoverflow.com/questions/34689852/…
  • 也就是说,如果导入依赖于特定的测试用例,importlib 可能是您想要采取的路线

标签: python unit-testing import testcase


【解决方案1】:

见 PEP8:https://www.python.org/dev/peps/pep-0008/#id23

它说,

导入总是放在文件的顶部,就在任何模块 cmets 和 docstrings 之后,在模块全局变量和常量之前。

【讨论】:

  • 即使在单元测试中?想象一下,如果测试很大,sys.path 的负载会有多大。
  • 我一直想知道这个 PEP8 指南的基本原理。至少在您的示例中,测试模块与功能模块分开。所以不管你把它放在文件顶部还是其他地方都没有关系。
猜你喜欢
  • 2010-09-08
  • 2011-03-04
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
相关资源
最近更新 更多