我的一些 TestNG 测试涉及持久数据使用。当测试完成时,应该执行一些操作来恢复数据的状态(例如清理)。我使用@AfterClassor解决了这个问题@AfterMethod。
问题是,有时在开发过程中我的测试会挂起,我需要手动终止它。当终止运行测试的 JVM 进程时,我必须自己执行所有测试后操作。
有什么方法可以终止测试以便@After*调用我的方法吗?
答案是通过的方法创建一个关闭钩子 ,如下所示:RuntimeaddShutdownHook
static volatile boolean cleanedUp = false;
static final Object lock = new Object();
@BeforeClass
public static void setup() {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
MyTestClass.tearDown();
}
}
}
@AfterClass
public static void tearDown() {
synchronized (lock) {
if (cleanedUp) return;
// do clean up
cleanedUp = true;
}
}
Run Code Online (Sandbox Code Playgroud)
使用同步可确保清理仅执行一次。
| 归档时间: |
|
| 查看次数: |
5501 次 |
| 最近记录: |