テンプレートモード(Template pattern)
2284 ワード
詳細
テンプレートモードには、親と子の構成があります.親クラスは抽象クラスであり、テンプレートを構築してあることを完了する流れを規定している.子クラスは親クラスを継承し、具体的な各プロセス操作を実現します.
以下はjunit 3の親がテストを実行する際に前後して実行する3つの方法の順序を規定し、方法の内容は子に多態を除く
次に、子クラスが親クラスを継続し、多態で親定義を具体的に実現する方法を示します.
テンプレートモードには、親と子の構成があります.親クラスは抽象クラスであり、テンプレートを構築してあることを完了する流れを規定している.子クラスは親クラスを継承し、具体的な各プロセス操作を実現します.
以下はjunit 3の親がテストを実行する際に前後して実行する3つの方法の順序を規定し、方法の内容は子に多態を除く
public abstract class TestCase extends Assert implements Test {
public void runBare() throws Throwable {
setUp();
try {
runTest();
}
finally {
tearDown();
}
}
protected void runTest() throws Throwable {
assertNotNull(fName);
Method runMethod= null;
try {
runMethod= getClass().getMethod(fName, null);
} catch (NoSuchMethodException e) {
fail("Method \""+fName+"\" not found");
}
if (!Modifier.isPublic(runMethod.getModifiers())) {
fail("Method \""+fName+"\" should be public");
}
try {
runMethod.invoke(this, new Class[0]);
}
catch (InvocationTargetException e) {
e.fillInStackTrace();
throw e.getTargetException();
}
catch (IllegalAccessException e) {
e.fillInStackTrace();
throw e;
}
}
protected void setUp() throws Exception {
}
protected void tearDown() throws Exception {
}
}
次に、子クラスが親クラスを継続し、多態で親定義を具体的に実現する方法を示します.
public class CalculatorTest extends TestCase
{
@Override
public void setUp() throws Exception
{
System.out.println(++count);
cal = new Calculator();
}
@Override
public void tearDown() throws Exception
{
}
public void testAdd()
{
int result = cal.add(1, 2);
Assert.assertEquals(3, result);
}
public void testSubtract()
{
int result = cal.subtract(1, 2);
Assert.assertEquals(-1, result);
}
public void testMultiply()
{
int result = cal.multiply(2, 3);
Assert.assertEquals(6, result);
}
}
public static void main(String[] args)
{
junit.swingui.TestRunner.run(CalculatorTest.class);
}
}