在一个项目中有多个测试类,每个测试类都包含多个测试方法。比如说,我想在运行每个测试类之前创建一个数据库连接。无论我是运行单个测试类、多个测试类还是测试套件,都应该建立连接。最重要的是,在有多个测试类的情况下,不应一遍又一遍地调用此步骤。无论我运行的测试类数量如何,都应该只建立一次连接。
你能提出一个设计或任何 JUnit 技巧来解决这个问题吗?
在一个项目中有多个测试类,每个测试类都包含多个测试方法。比如说,我想在运行每个测试类之前创建一个数据库连接。无论我是运行单个测试类、多个测试类还是测试套件,都应该建立连接。最重要的是,在有多个测试类的情况下,不应一遍又一遍地调用此步骤。无论我运行的测试类数量如何,都应该只建立一次连接。
你能提出一个设计或任何 JUnit 技巧来解决这个问题吗?
您可以在测试套件中运行这些类。请参阅此问题和提供的答案。
或者更改您的设计并使用@BeforeClass
注释在每个测试类之前运行一次设置。
有时,多个测试需要共享计算量大的设置(例如登录数据库)。虽然这可能会损害测试的独立性,但有时它是必要的优化。使用 @BeforeClass 注释公共静态 void 无参数方法会导致它在类中的任何测试方法之前运行一次。超类的@BeforeClass 方法将在当前类之前运行。
使用@Before Junit 注解
在编写测试时,通常会发现多个测试需要创建类似的对象才能运行。使用 @Before 注释公共 void 方法会导致该方法在 Test 方法之前运行。超类的 @Before 方法将在当前类的方法之前运行。
只需为所有 junit 类引入一个超类。您可以将数据库连接逻辑放在您的超类 @Before 注释方法中。
如果您使用的是 spring-test,那么您可以使用此处采用的技术:How to load DBUnit test data once per case with Spring Test