Я не могу воспроизвести это с помощью Gradle 6.3 и JUnit 5; Я кратко вижу процесс [java] <defunct>
в выводе ps
, и он исчезает сам по себе. Может быть, это потому, что я запускаю только один набор тестов, а когда вы запускаете больше, вам нужно будет выполнять очистку после каждого.
Тем не менее, посмотрите на Java API процесса . Запустите приложение, как в этот вопрос , но сохраните Process
, возвращенный из ProcessBuilder.start()
, и вызовите его метод destroy()
в своем методе @AfterClass
.
package com.example.demo;
import java.util.ArrayList;
import org.junit.jupiter.api.*;
public class DemoApplicationTests {
private static Process process;
@BeforeAll
public static void beforeClass() throws Exception {
ArrayList<String> command = new ArrayList<String>();
command.add(System.getProperty("java.home") + "/bin/java"); // quick and dirty for unix
command.add("-cp");
command.add(System.getProperty("java.class.path"));
command.add(DemoApplication.class.getName());
ProcessBuilder builder = new ProcessBuilder(command);
process = builder.inheritIO().start();
}
@Test
void whatever() {
// ...
}
@AfterAll
public static void afterClass() {
process.destroy();
}
}