以下是我如何实现它,通过使用Spring bean在我的数据库中设置一些测试数据,通过将上面的Sam的答案与此答案相结合:https://stackoverflow.com/a/51556718/278800dataSource
import javax.sql.DataSource;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit.jupiter.SpringExtension;
public class TestDataSetup implements BeforeAllCallback, ExtensionContext.Store.CloseableResource {
  private static boolean started = false;
  private DataSource dataSource;
  @Override
  public void beforeAll(ExtensionContext extensionContext) {
    synchronized (TestDataSetup.class) {
      if (!started) {
        started = true;
        // get the dataSource bean from the spring context
        ApplicationContext springContext = SpringExtension.getApplicationContext(extensionContext);
        this.dataSource = springContext.getBean(DataSource.class);
        // TODO: put your one-time db initialization code here
        // register a callback hook for when the root test context is shut down
        extensionContext
            .getRoot()
            .getStore(ExtensionContext.Namespace.GLOBAL)
            .put("TestDataSetup-started", this);
      }
    }
  }
  @Override
  public void close() {
    synchronized (TestDataSetup.class) {
      // TODO: put your db cleanup code here
    }
  }
(我不是100%确定线程的安全性,所以我只是为了安全起见而添加了块。synchronized
要启用此扩展,您只需将此注释添加到需要它的测试类中:
@ExtendWith(TestDataSetup.class)
好消息是 Junit 5 允许多个扩展,因此即使您的测试已经用 .@ExtendWith(SpringExtension.class)