JUnit封闭的跑步者和共享设置

cho*_*ban 10 java junit

我正在尝试使用JUnit运行程序Enclosed,以便尝试改进我的一些测试的组织.目前我正在努力研究如何在内部类之间共享一些设置.

尝试第一个:

@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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有人向Meggan问好.如果我更新内部类以扩展外部类,那么我得到以下内容:

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)
Run Code Online (Sandbox Code Playgroud)

Enclosed尝试在内部测试类之间共享设置时是否有特定的习惯用法?我希望它会像我找到C#示例一样简单.

Gon*_*heu 17

封闭的跑步者内部作为套件工作,也就是说,它将类作为测试用例运行.由于封闭的跑步者忽略了Junit 4.12抽象内部类.

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

@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));
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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