「スーパークラスで処理の枠組みを決め、サブクラスで具体的な内容を定める」パターンです。
テストコードを実行するプログラムを書きます。
テストコードの仕様は以下のようにします。
setup関数
=> main関数
=> teardown関数
の順で実行main関数
が通った場合、”.”とクラス名を出力するmain関数
でエラーが出たら”E”とクラス名を出力するimport sys
def main():
Test1().test()
Test2().test()
class TestFrame:
def __init__(self):
self.counter = 0
def test(self):
self.setup()
try:
self.main()
except AssertionError:
self.counter += 1
sys.stderr.write("E => {}\n".format(self.__class__.__name__))
if self.counter == 0:
sys.stderr.write(". => {}\n".format(self.__class__.__name__))
self.teardown()
def setup(self):
pass
def main(self):
pass
def teardown(self):
pass
class Test1(TestFrame):
def setup(self):
print("Test1 class setup method")
def main(self):
print("Test1 class main method")
assert 1 == 1
def teardown(self):
print("Test1 class teardown method")
class Test2(TestFrame):
def setup(self):
print("Test2 class setup method")
def main(self):
print("Test2 class main method")
assert 1 == 3
def teardown(self):
print("Test2 class teardown method")
if __name__ == "__main__":
main()
下2行は標準エラー出力に出ています。
Template Methodは割と使用場面がイメージしやすいです。
「処理の枠組み(=流れ)」が決まっているものは、処理の流れをスーパークラスに書き、
具体的な処理はサブクラスに書くだけで処理の枠組みを書く手間をへらすことができます。
特になし
特になし