Java JUnit封闭式运行程序和共享设置

Java JUnit封闭式运行程序和共享设置,java,junit,Java,Junit,我正在使用JUnit封闭的运行程序进行实验,以尝试改进我的一些测试的组织。目前,我正在尝试解决如何在内部类之间共享一些设置 尝试第一种方法: @RunWith(Enclosed.class) public class EnclosedTest { @Before public void printSomething() { System.out.println("Helllooo Meggan"); } public static class

我正在使用JUnit
封闭的
运行程序进行实验,以尝试改进我的一些测试的组织。目前,我正在尝试解决如何在内部类之间共享一些设置

尝试第一种方法:

@RunWith(Enclosed.class)
public class EnclosedTest {

    @Before
    public void printSomething() {
        System.out.println("Helllooo Meggan");
    }

    public static class FirstTest {

        @Test
        public void assertThatSomethingIsTrue() {
            assertThat(true, is(true));
        }
    }

    public static class SecondTest {

        @Test
        public void assertThatSomethingIsFalse() {
            assertThat(false, is(false));
        }
    }
}
不幸的是,没有人向梅根问好。如果我更新一个内部类来扩展外部类,那么我会得到以下结果:

java.lang.Exception: class 'org.scratch.EnclosedTest$FirstTest' (possibly indirectly) contains itself as a SuiteClass
at org.junit.runners.model.InitializationError.<init>(InitializationError.java:32)
java.lang.Exception:类“org.scratch.EnclosedTest$FirstTest”(可能间接)将自身包含为SuiteClass
位于org.junit.runners.model.InitializationError。(InitializationError.java:32)
在尝试在内部测试类之间共享设置时,是否有一个特定的
附带的
习惯用法?我希望它能像运行程序一样简单。

运行程序在内部作为测试用例运行,也就是说,它将类作为测试用例运行。由于JUnit4.12抽象内部类被封闭的运行程序忽略

也就是说,共享设置的方法是创建一个包含它的抽象类(@Before,@After):

请注意,您甚至可以为每个子类声明自定义运行器

@RunWith(Enclosed.class)
public class EnclosedTest {

  abstract public static class SharedSetUp {
    @Before
    public void printSomething() {
      System.out.println("Helllooo Meggan");
    }
  }

  public static class FirstTest extends SharedSetUp {
    @Test
    public void assertThatSomethingIsTrue() {
      assertThat(true, is(true));
    }
  }

  public static class SecondTest extends SharedSetUp {
    @Test
    public void assertThatSomethingIsFalse() {
      assertThat(false, is(false));
    }
  }
}