【问题标题】:How to get connection to database in order to create test queries in DbSetup如何连接到数据库以便在 DbSetup 中创建测试查询
【发布时间】:2026-01-07 01:20:03
【问题描述】:

我不明白如何在 DbSetup 中获取数据库连接,因为它没有在用户指南中显示。

我有以下 @BeforeEach 方法,我在其中插入初始数据并将 H2 数据库设置为我的数据库。

如何从@Test 方法中引用它?如何使用 DbSetup 创建简单的 SELECT - 查询测试?

public class DBSetupTest  {

  private static DbSetupTracker dbSetupTracker = new DbSetupTracker();

  @BeforeEach
    public void prepare() throws Exception {
        Operation operation =
            sequenceOf(
                CommonOperations.DELETE_ALL,
                CommonOperations.INSERT_REFERENCE_DATA,
                insertInto("VENDOR")
                    .columns("ID", "CODE", "NAME", "COUNTRY_ID")
                    .values(1L, "AMA", "Amazon", 2)
                    .values(2L, "PMI", "PriceMinister", 1)
                    .build());

        DbSetup dbSetup = new DbSetup(new DriverManagerDestination("jdbc:h2:mem:default", "sa", "sa"), operation);
        dbSetupTracker.launchIfNecessary(dbSetup);

    }
    
    @Test
    public void testFindByCriteria() {
        //dbSetupTracker.skipNextLaunch();
        
        assertEquals("Something from the database", "test");

    }
}

【问题讨论】:

    标签: java jdbc h2 junit5 dbsetup


    【解决方案1】:

    您只需要修改或添加另一个带有@BeforeEach 注释的函数。

    您需要的是与数据库的连接和执行查询的语句对象。

    public class DBSetupTest  {
    
      private static DbSetupTracker dbSetupTracker = new DbSetupTracker();
      private Connection conn;
      private Statement st;
    
    
      @BeforeEach
      public void getConnection() throws SQLException {
        String jdbcUrl = ""; // enter your jdbc url here
        conn = DriverManager.getConnection(jdbcUrl);
        st = conn.createStatement();
      }
      
      @BeforeEach
        public void prepare() throws Exception {
            Operation operation =
                sequenceOf(
                    CommonOperations.DELETE_ALL,
                    CommonOperations.INSERT_REFERENCE_DATA,
                    insertInto("VENDOR")
                        .columns("ID", "CODE", "NAME", "COUNTRY_ID")
                        .values(1L, "AMA", "Amazon", 2)
                        .values(2L, "PMI", "PriceMinister", 1)
                        .build());
    
            DbSetup dbSetup = new DbSetup(new DriverManagerDestination("jdbc:h2:mem:default", "sa", "sa"), operation);
            dbSetupTracker.launchIfNecessary(dbSetup);
    
        }
        
        @Test
        public void testFindByCriteria() {
            // now in the tests you can use the statement to get rows
            ResultSet rs = st.executeQuery("SELECT * FROM VENDOR;");
            assertEquals("Something from the database", "test");
    
        }
    }
    

    【讨论】: