[英]How to reuse existing JUnit tests in another test class?
如何在另一个测试类中重用JUnit测试?
例如:
public TestClass1 {
@Test
public void testSomething(){...}
}
public TestClass2 {
@Test
public void testSomethingAndSomethingElse() {
// Somehow execute testSomething()
// and then test something else
}
}
一般来说,避免这种情况。 它很容易使测试更加脆弱。 如果TestClass1
失败,则TestClass2
隐式失败,这至少是由于以下原因:
偶尔共享测试代码部分很有用,特别是对于集成测试。 以下是您可以在不依赖测试的情况下执行此操作的方法:
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()
方法中进行。
不要直接从TestClass1
中的TestClass2
调用方法。 测试用例以这种方式变得不那么可读,并且可能导致意大利面条菜肉馅煎蛋饼 。
像往常一样,你可以:
TestClass2
从TestClass1
TestClass2
访问TestClass1
: 例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();
}
}
从逻辑上讲,没有理由从另一个测试方法中调用一个测试方法。 任何运行一次测试的工具都可以轻松地在包中进行所有测试。 但是如果你需要,你可以像任何其他类中的任何其他方法一样调用它。
您最可能想要做的是为两种测试方法执行一些常见设置。 您可以that
代码放在公共类中的实用程序方法中,并在两个测试中调用公共代码。
这通常用于运行具有不同配置的测试。 不要担心,继续。
在第一步创建自己的测试而不考虑任何配置:
public abstract BaseTests {
@Test
protected void somethingHelper() {
// Test something
}
}
然后,扩展测试类并添加一些配置:
public TestClass1 extends BaseTests {
@Before
public void setup(){
// TODO: config
}
}
没有必要进行特定配置,但它在可配置系统中很常见(系统的主要功能必须对每个配置有效)。
在另一个测试案例中:
public TestClass2 extends BaseTests {
@Before
public void setup(){
// TODO: other config
}
}
例如,可能存在加密和解密过程,其中必须识别加密>解密的序列。 另一方面,在测试过程是唯一的时候,有一种不同的算法可供使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.