Skip to main content
 首页 » 编程设计

python之单元测试组织——如何不运行基类测试

2025年05月04日18zfyouxi

我有这样的测试:

import unittest 
 
class TestBase(unittest.TestCase): 
 
   def setUp(self): 
      self.decorator = None 
 
   def testA(self): 
      data = someGeneratorA().generate() 
      self.assertTrue(self.decorator.someAction(data))   
 
   def testB(self): 
      data = someGeneratorB().generate() 
      self.assertTrue(self.decorator.someAction(data))   
 
   def testC(self): 
      data = someGeneratorC().generate() 
      self.assertTrue(self.decorator.someAction(data))   
 
 
class TestCaseA(TestBase): 
 
   def setUp(self): 
      self.decorator = SomeDecoratorA 
 
 
class TestCaseB(TestBase): 
 
   def setUp(self): 
      self.decorator = SomeDecoratorB 

如您所见,TestCaseA 和 TestCaseB 非常相似,所以我制作了 TestBase 类来实现 testA、testB 和 testC 方法。

TestCaseA 与 TestCaseB 只有装饰器参数不同。

所以,我想问一下,有没有更好的方法来组织我的测试?我有问题,因为 TestBase 类 - 它是测试 - 不应该运行(self.decorator 是 None 所以它会引发异常)

请您参考如下方法:

任何继承自 unittest.TestCase 的东西都被视为一组测试。

您可以让您的基类不继承TestCase,而是将该基类移动到您的具体测试类:

class TestBase(object): 
    # base tests to be reused 
 
class TestCaseA(TestBase, unittest.TestCase): 
    # Concrete tests, reusing tests defined on TestBase 
 
class TestCaseB(TestBase, unittest.TestCase): 
    # Concrete tests, reusing tests defined on TestBase