HelloWorldのテストの問題点

HelloWorldのテストは一応出来はしたが、なんかしっくり来ない。

しっくり来ない部分は次の通り

  • MockPrintStreamがPrintStreamをextendしていること
    • PrintStreamがfinalだったりしたら出来ない
  • System.setOut で System.out を設定していること
    • 同じようなfinal static field で設定が無い場合テストできない

で、理想的にはこういうコードでテストしたいのだが今のところうまく動かない

package tutorial;

import static org.junit.Assert.*;
import java.io.PrintStream;
import mockit.*;
import org.junit.Test;

public class HelloWorldTest2 {
	static public class MockPrintStream  {
		public void println(String str) {
			assertEquals(str,"Hello World");
		}
	}

	@Test
	public void testMain() throws Exception {
		Mockit.redefineMethods(PrintStream.class, MockPrintStream.class);

		HelloWorld.main(null);
	}
}

PrintStreamという組み込みクラスを偽装するのが問題で、Boot Class Loaderがどうたら。。。という事のようだ。
引き続き調査する。