JMockitのAnnotationを使ったテスト

前の redefineMethods を使った次のようなテストコードは

package tutorial;

import static org.junit.Assert.*;

import mockit.*;

import org.junit.After;
import org.junit.Test;

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

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

		HelloWorld.main(null);
	}
	@After
	public void tearDown() {
	   Mockit.tearDownMocks();
	}
}

JMockit の Annotationを使って次のようにも書ける。

package tutorial;

import static org.junit.Assert.*;

import mockit.*;

import org.junit.After;
import org.junit.Test;

public class HelloWorldTest4 {
	@MockClass(realClass=DummyStream.class)
	static public class MockPrintStream  {
		@Mock
		public void print(String str) {
			assertEquals(str,"Hello World");
		}
	}

	@Test
	public void testMain() throws Exception {
		Mockit.setUpMock(new MockPrintStream());

		HelloWorld.main(null);
	}
	@After
	public void tearDown() {
	   Mockit.tearDownMocks();
	}
}

ただ、この書き方のメリットがいまいち理解できていない。