embedded-postgres写单元测试
以下是一个使用embedded-postgres
在Java中编写的单元测试示例,该测试会启动一个嵌入式PostgreSQL服务器,运行一个简单的查询,并断言结果是否如预期:
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import ru.yandex.qatools.embed.postgresql.EmbeddedPostgres;
import ru.yandex.qatools.embed.postgresql.util.SocketUtil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import static org.junit.Assert.assertEquals;
public class EmbeddedPostgresTest {
private static EmbeddedPostgres postgres;
private static String dbUrl;
@BeforeClass
public static void startPostgres() throws Exception {
// 获取可用的网络端口
int port = SocketUtil.findAvailableTcpPort(5432);
// 启动嵌入式PostgreSQL服务器
postgres = new EmbeddedPostgres(port);
postgres.start();
// 获取数据库URL
dbUrl = postgres.getJdbcUrl("postgres", "postgres");
}
@AfterClass
public static void stopPostgres() throws Exception {
// 停止嵌入式服务器
postgres.stop();
}
@Test
public void testQuery() throws Exception {
// 建立数据库连接
try (Connection connection = DriverManager.getConnection(dbUrl, "postgres", "postgres")) {
// 创建Statement对象执行查询
try (Statement statement = connection.createStatement()) {
// 运行一个创建表和插入数据的SQL脚本
statement.execute("CREATE TABLE test_table (id SERIAL PRIMARY KEY, name VARCHAR(255));");
statement.execute("INSERT INTO test_table (name) VALUES ('test');");
// 运行查询并验证结果
try (ResultSet resultSet = statement.executeQuery("SELECT name FROM test_table WHERE id = 1;")) {
assertEquals(true, resultSet.next());
assertEquals("test", resultSet.getString("name"));
assertEquals(false, resultSet.next());
}
}
}
}
}
这段代码首先使用@BeforeClass
注解启动了一个嵌入式PostgreSQL服务器,然后定义了一个@Test
注解的方法,该方法创建了一个数据库连接,执行了一个简单的查询,并断言查询结果是否如预期。最后,在@AfterClass
注解的方法中停止了PostgreSQL服务器。这个过程模拟了在实际开发中进行单元测试的情况,确保数据库操作在不影响系统其余部分的情况下能正确运行。
评论已关闭