如何在另一个测试类中重用现有的 JUnit 测试?

2022-09-01 03:11:33

如何在另一个测试类中重用 JUnit 测试?

例如:

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

public TestClass2 {
    @Test
    public void testSomethingAndSomethingElse() {
        // Somehow execute testSomething()
        // and then test something else
    }
}

答案 1

通常避免这种情况。它容易使测试更加脆弱。如果失败,则隐式失败,这至少由于以下原因而不需要:TestClass1TestClass2

  • 代码经过多次测试,这会浪费执行时间。
  • 测试不应该相互依赖,它们应该尽可能地解耦
  • 如果这成为一种模式,那么通过查看哪些测试失败来识别哪一部分代码被破坏将变得更加困难,这是测试要点的一部分。

偶尔共享测试代码部分非常有用,特别是对于集成测试。以下是在不依赖于测试本身的情况下执行此操作的方法:

public abstract BaseTests {

    protected void somethingHelper() {
        // Test something
    }
}

public TestClass1 extends BaseTests {
    @Test
    public void testSomething(){
        somethingHelper();
    }
}

public TestClass2 extends BaseTests {
    @Test
    public void testSomethingAndSomethingElse() {
        somethingHelper();
        // and then test something else
    }
}

或者,您可以使用帮助程序类并完全避免继承。断言等可以进入方法。somethingHelper()

不要直接从 in 调用方法。测试用例以这种方式变得不那么可读,并且可能导致意大利面煎饼TestClass1TestClass2


答案 2

像往常一样,您可以:

  1. 延伸自TestClass2TestClass1
  2. 使用委派进行访问:TestClass1TestClass2

示例 1:

// Instantiate TestClass1 inside test method
public TestClass2 {
    public void testSomethingAndSomethingElse1() {
         new TestClass1().testSomething();
    }
}

示例 2:

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

推荐