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