Peter Coad在他的书Java Design中指出,子类应该满足的五个标准之一是子类“并不仅仅描述实用类(您希望重用的有用功能)”。对于Java中的一个例子,他说将你的一个域类作为the Observable
class的一个子类违反了他的规则:“Observable是一个实用类,一组有用的方法 - 仅此而已。”继承,组合或其他 - 我应该在测试中继承一个实用类吗?
在这种情况下,这里有一些经过实际测试图案的例子测试类,我写了:
class BaseDataGeneratorTestCase (unittest.TestCase):
def _test_generate_data(self, generator, expected_value):
# Imagine there's a lot more code here, making it
# worthwhile to factor this method out.
assert generator.generate_data() == expected_value
class DataGeneratorTests (BaseDataGeneratorTestCase):
def test_generate_data(self):
self._test_generate_data(DataGenerator(), "data")
class VariantDataGeneratorTests (BaseDataGeneratorTestCase):
def test_generator_data(self):
self._test_generate_data(VariantDataGenerator(),
"different data")
虽然这个例子很简单,考虑到实际试验和他们周围的系统当然,更复杂。我认为这个例子可以作为一种工具来尝试和澄清我对继承的正确使用的一些混淆。
是继承BaseDataGeneratorTestCase
一个坏主意?它是否符合“有用的功能(我愿意重复使用”)? _test_generate_data
应该只是一个函数,而不是任何类?
感谢您的回答。太糟糕了,没有更多的人与他人讨论。也许这种品牌的牦牛剃须对少数人有吸引力。 – draebek 2012-03-22 17:15:26