java - JUnit 封闭式​​运行器和共享设置

标签 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));
        }
    }
}

不幸的是,没有人向梅根问好。如果我更新一个内部类来扩展外部类,那么我会得到以下结果:

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)

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

最佳答案

Enclosed运行者在内部工作为 Suite ,也就是说,它将类作为测试用例运行。并且自 Junit 4.12 以来,抽象内部类被 Enclosed runner 忽略。

也就是说共享设置的方法是创建一个包含它的抽象类(@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));
    }
  }
}

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

关于java - JUnit 封闭式​​运行器和共享设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775984/

相关文章:

java - 如何调试接收 RECEIVE_BOOT_COMPLETED Intent 过滤器的广播接收器?

java - 如何使用 Mockito 模拟 @Value 类?

java - JUnit 测试用例未在 Controller 中检测方法

Maven:在项目B中使用项目A的特定测试类

java - junit-vintage-engine和junit-jupiter-engine之间的区别?

java - Android 单元测试内容解析器类

java - 为什么我的缓冲 `String` 与 `RegEx` 模式不匹配?

java - 在 Kotlin 的运行 block 中继续

java - 如何将列表映射的值转换为单个列表

java - 配置ActiveMQ插件,无需activemq.xml和spring