如何在另一个测试类中使用现有的JUnit测试,以便它能够通过@before?

时间:2017-06-25 14:05:39

标签: java junit automation integration-testing

我知道在这个论坛中还有另一个问题可能看似相似。请在标记为重复之前通读。

我正在寻找一种方法来运行测试,该测试在另一个类中定义,其方式是它将通过@before注释。

public TestClass1 {
    @before
    public void setup() throws Exception{
        super.setup();
    }

    @Test
    public void testSomething(){...}
}

public TestClass2 {
    @Test
    public void testSomethingAndSomethingElse() {
       // Somehow execute testSomething() in a way which will force 
          it to go through the @before
       // and then test something else
       }
}

在类似的在线问题中,有2条建议:
1.从TestClass1扩展TestClass2 - 这对我来说是不可能的,因为我已经扩展了另一个类。
2.使用委托从TestClass2访问TestClass1,如下所示:

// Instantiate TestClass1 as a member of TestClass2
public TestClass2 {
    private TestClass1 one = new TestClass1();
    public void testSomethingAndSomethingElse1() {
        one.testSomething();
    }
}

这里的问题是当调用one.testSomething()时 - 你不会通过TestClass1的@before注释,在我的情况下需要它来启动其他对象。

或许还有另一种方式吗?

用于集成测试而非单元测试。 我需要能够在另一个@test中使用@test,而不是任何其他的解决方法。

2 个答案:

答案 0 :(得分:1)

如果您尝试在许多测试类中重用相同的代码,我建议您使用@Rule框架中的JUnit。也许ExternalResource就是你所需要的:

public class SetupResource extends ExternalResource {
    @Override
      protected void before() throws Throwable {
       //setup the code
    }
}

将您想要的代码放在before()方法中,然后像这样定义JUnit Rule

@Rule
public ExternalResource resource = new SetupResource ()

答案 1 :(得分:0)

假设同一类的TestClass1TestClass2子类考虑将@before注释提升到超类:

public class TestCalss {

    @Before
    public void setUp() throws Exception {
        System.out.println("setup");
    }
}

public class TestCalss1 extends TestCalss{}
public class TestCalss2 extends TestCalss{}