【发布时间】:2015-02-04 23:21:45
【问题描述】:
目前我有许多类似的单元测试测试用例。每个 TestCase 都包含数据(输入值 + 预期输出值)和逻辑(调用 SUT 并将实际输出与预期输出进行比较)。
我想将数据与逻辑分开。因此,我想要一个只包含逻辑的基类和一个只包含数据的派生类。到目前为止,我想出了这个:
import unittest
class MyClass():
def __init__(self, input):
self.input = input
def get_result(self):
return self.input * 2
class TestBase(unittest.TestCase):
def check(self, input, expected_output):
obj = self.class_under_test(input)
actual_output = obj.get_result()
self.assertEqual(actual_output, expected_output)
def test_get_result(self):
for value in self.values:
self.check(value[0], value[1])
class TestMyClass(TestBase):
def __init__(self, methodName='runTest'):
unittest.TestCase.__init__(self, methodName)
self.class_under_test = MyClass
self.values = [(1, 2), (3, 6)]
unittest.main(exit = False)
但这失败并出现以下错误:
AttributeError: 'TestBase' object has no attribute 'values'
两个问题:
- 我的“设计”有用吗?
- 还需要什么才能使其正常工作?
【问题讨论】:
-
请注意,将
TestCase.__init__用于任何事情都是不寻常的(根据我的经验)。一般初始化代码在TestCase.setUp。
标签: python inheritance unit-testing