我有一个包含所有测试用例类的java包。每个类都包含很多测试用例。每个类都由JUnit逐个加载和运行。但是,每个类都包含通用配置代码,该代码一次又一次地运行,并在每次运行每个类时进行初始化。 这些初始化需要花费很多时间。
是否有某种方法可以先加载这些配置更改,然后运行测试用例,这样我就不需要每次都加载它们。
答案 0 :(得分:2)
JUnit4有@BeforeClass注释。 做这样的事情:
public class TestClass {
private static SomeConnection connection;
@BeforeClass
public static void setUp() {
//do common setup
connection = new SomeConnection();
}
@Test
public void testSomething() { }
@Test
public void testSomethingElse() { }
@AfterClass
public static void tearDown() {
//do teardown operations
connection.close();
}
}
标有@BeforeClass
的方法只会运行一次。只需确保使用JUnit4。
<强>更新强>
另请注意,它应该是静态,并且正如@ChristopheRoussy所提到的,您可以使用@AfterClass来破坏您的常用设置。
答案 1 :(得分:2)
您可以创建在运行类中的测试之前运行的static
方法。
@BeforeClass
public static void ranOnlyOnce() {
/*...*/
}
此外,如果您想在所有测试之前运行一次,那么您应该将测试分组到一个套件中,并将此方法放在此类中,并使用JUnit运行套件而不是测试。
@RunWith(Suite.class)
@SuiteClasses(value = { Test1.class, ... , Testn.class })
public class AllTests {
@BeforeClass
public static void beforeAllTests() {
/*...*/
}
}
请注意,注释只能在Junit 4 +中使用。
答案 2 :(得分:1)
我建议将您的测试分组到测试套件并从测试套件进行初始化。这里有可能讨论的可能性http://www.xoriant.com/blog/software-testing-and-qa/using-customized-junit-testsuite-for-testing.html
答案 3 :(得分:0)
有很多种可能性。第一个也是最简单的是使用Matyas和jFrenetic建议的@BeforeClass
和@AfterClass
。如果没有测试类共享设置代码,这是最简单的方法。
如果类共享相同的设置和拆卸,请查看使用TestRule,特别是ExternalResource,它允许您在每个类之前和之后运行代码。这与@BeforeClass
和@AfterClass
之间的区别在于它使用相同的类,因此可以更轻松地共享代码。这可以做到例如:
@RunWith(Suite.class)
@SuiteClasses({A.class, B.class, C.class})
public class UsesExternalResource {
public static Server myServer= new Server();
@ClassRule
public static ExternalResource resource= new ExternalResource() {
@Override
protected void before() throws Throwable {
myServer.connect();
};
@Override
protected void after() {
myServer.disconnect();
};
};
}
这也适用于测试类,因此您可以为不同的类设置不同但共享的设置。