我知道在这个论坛中还有另一个问题可能看似相似。请在标记为重复之前通读。
我正在寻找一种方法来运行测试,该测试在另一个类中定义,其方式是它将通过@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,而不是任何其他的解决方法。
答案 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)
假设同一类的TestClass1
和TestClass2
子类考虑将@before
注释提升到超类:
public class TestCalss {
@Before
public void setUp() throws Exception {
System.out.println("setup");
}
}
public class TestCalss1 extends TestCalss{}
public class TestCalss2 extends TestCalss{}