読者です 読者をやめる 読者になる 読者になる

丸三角四角

IT業界にしがみつく新人SEが立派なプログラマになろうともがく奮闘記

【Java】プログラミングコンテスト用JUnit基底クラス_Ver2

AOJ IT JUnit Java アルゴリズム プログラミングコンテスト

JUnit基底クラスを作り直しました。

Ver1は以下の記事で紹介しています。

dadainu.hateblo.jp

今回修正したのは、3点あります。

① エラー情報を標準出力

② 基底クラス側で標準出力取得

③ アサートエラーも基底クラス側で処理

以下コードです。

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.PrintStream;
import java.util.Scanner;
import org.junit.After;
import org.junit.Before;

public class BaseTest {

    /** コンソール正常出力取得クラス */
    protected final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
    /** コンソール正常出力取得結果 */
    private String[] outList;

    /** テスト実行前処理 */
    @Before
    public void setUp() throws Exception {
        System.setOut(new PrintStream(outContent));
    }

    /** テスト実行後処理 */
    @After
    public void tearDown() throws Exception {
        System.setOut(null);
    }

    /** 出力値リスト検証 */
    protected void assertOutList(String outDataPath) {
        outList = outContent.toString().split("\n");
        try (Scanner scan = new Scanner(new File(outDataPath))) {
            assertOutItem(scan);
        } catch (Throwable e) {
            assertErr(e);
        }
    }

    /** 出力値検証 */
    private void assertOutItem(Scanner scan) {
        for (int index = 0; index < outList.length; index++) {
            assertEquals(String.valueOf(index + 1), scan.nextLine(), outList[index]);
        }
    }

    /** エラー情報出力 */
    private void assertErr(Throwable e) {
        fail(e.getMessage());
    }
}

エラーが起きていても出力されていない事象があったため、今回修正致しました。この基底クラスの修正に伴って継承している全ドライバも修正しなければならなくなりました。修正したドライバは随時他の記事で紹介していきます。

ぜひ参考にして頂ければと思います。

 

アルゴリスムで困った時は、以下の本を参考にしてます。Javaに置き換えるのが少々難解ですが、、、