こんなのがあったから、マジクソレス。
眠いだけなので、害意はありません。
Kotlinの話と見せかけてJUnitの話をあげとく/
【JUnit】出来るの?かもしれない@Aftrer処理をメソッド単位でSkipする方法 http://t.co/5YBT6r3M70
— やんく (@yy_yank) 2015, 3月 20
@Before
で全てのテストメソッドで初期化するけど、特定のテストメソッドだけ@After
の処理をさせたくないらしい。
回答 : 継承と@RunWith(Enclosed.class)
使えば良い。
package q.yy.yank; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.runners.Enclosed; import org.junit.rules.TestName; import org.junit.runner.RunWith; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertThat; @RunWith(Enclosed.class) public class SkipSomeAfter { public static abstract class SameBefore { @Rule public TestName name = new TestName(); @Before public void setUp() { System.out.println(name.getMethodName() + " - やるよ"); } } public static class RunAfterTests extends SameBefore { @After public void tearDown() { System.out.println(name.getMethodName() + " - 楽しかったね"); } @Test public void うらがみ() { assertThat(1, is(1)); } @Test public void しょぼちむ() { assertThat("ふええ", is("ふええ")); } @Test public void たろう() { assertThat("こっとりん".length(), is(5)); } @Test public void よこな() { assertThat("じゃんけん", is(notNullValue())); } } public static class ハブ extends SameBefore { @Test public void やんく() { assertThat(":q!", is(":q! :q!")); } } }
実行結果はこんな感じだった
Done 5 of 5 Failed: 1 やんく - やるよ java.lang.AssertionError: Expected: is ":q! :q!" but: was ":q!" Expected ::q! :q! Actual ::q! たろう - やるよ たろう - 楽しかったね よこな - やるよ しょぼちむ - やるよ しょぼちむ - 楽しかったね よこな - 楽しかったね うらがみ - やるよ うらがみ - 楽しかったね Process finished with exit code 255