我有子类unittest.TestCase。每次我想使用@ unittest.skipIf时,是否仍应导入unittest?

时间:2018-11-15 20:33:55

标签: python python-unittest

我已经使用python unittest了很多,有一个装饰器方法可以用来有条件地跳过这样的测试:

import unittest

class TestStringMethods(unittest.TestCase):

@unittest.skipIf(1 == 1, 'Skipped because 1 does indeed equal 1')
def test_upper(self):
    self.assertEqual('foo'.upper(), 'FOO')

虽然我想向unittest.TestCase类添加一些功能,所以我将其子类化以开始添加自己的自定义代码:

import unittest

class CustomTestCase(unittest.TestCase):

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)  # Just use whatever is in TestCase's init + our stuff
    self.foo = 'foo'  # our stuff
    self.bar = 'bar'

def mymethod(self, param1, param2):  # Some custom method I wanted to make for these custom test cases
    pass

要继续使用@unittest.skipIf,我一直将import unittest粘贴在所有CustomTestCase测试文件的顶部,但是我想知道这是否是正确的处理方式。我的进口量超出了我的需求吗?还是我什么都不担心?

1 个答案:

答案 0 :(得分:1)

您继承的事实与您的要求无关。通常,子类可以导入或使用其超类很好:实际上,它们在定义时必须必须导入。这是问题的另一种解决方法(超类不应该知道其子类)。

  

继续使用@ unittest.skip如果我一直坚持导入   unittest位于任何CustomTestCase测试文件的顶部,但是我   想知道那是否是做事的正确方法。我要进口吗   比我需要的还要多?

如果要使用unittest模块(包括skipIf装饰器)之外的任何属性,则必须将其导入相关模块。没有比这更复杂的了。

如果您担心标头后卫之类的东西,例如C / C ++开发所需的东西,请不必担心。它不能像#include预处理程序指令那样工作(也就是说,它实际上并未在文件中包含unittest模块的源代码)。

如果您担心导入unittest太多次,请不要这样做。将import之类的模块unittest分解到给定项目的许多不同模块中是非常普遍的。

  

还是我什么都不担心?

是的。只要需要import unittest,就不用担心!

HTH。