我有一组需要执行数据库的测试。我想在执行开始时创建数据库并在最后删除它。
从 maven 我还向 maven-surefire-plugin 添加了一个RunListener,它工作正常。而且我还添加了一个名为ismaven的系统属性变量。当我从 maven 执行测试时,这个变量被初始化,但是当我从 Eclipse 执行测试时,这个变量为空(我使用System.getProperty访问该变量)。
<configuration>
<properties>
<property>
<name>listener</name>
<value>com.mycompany.MyRunListener</value>
</property>
</properties>
<systemPropertyVariables>
<ismaven>true</ismaven>
</systemPropertyVariables>
</configuration>
我所有的数据库测试都继承自一个具有@BeforeClass 和@AfterClass 方法的类。这些方法检查测试是由 Maven 执行还是由 Eclipse 检查ismaven属性的值。如果测试是由 maven 执行的,则ismaven属性有一个值,它们可以做任何事情。但是测试是否正在由 Eclipse 执行,ismaven变量为 null 并且它们启动 (@BeforeClass) 或停止 (@AfterClass) 数据库:
@BeforeClass
public static void checkIfStartDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, start the database
if (ismaven == null) {
startDatabase();
}
}
@AfterClass
public static void checkIfStopDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, stop the database
if (ismaven == null) {
stopDatabase();
}
}
此解决方案不能 100% 解决您的问题,但如果您实施它,您可以使用 Eclipse 执行(和调试)一个 JUnit 类的所有测试,您还可以使用 Maven 执行项目的所有测试,并保证您将在执行所有测试之前或之后执行一段代码。