当前位置: 首页 > news >正文

TestNG + 数据库 + 断言

1. pom.xml 依赖全覆盖xmldependencies dependency groupIdorg.testng/groupId artifactIdtestng/artifactId version7.8.0/version scopetest/scope /dependency !-- MySQL -- dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId version8.0.33/version /dependency !-- Oracle -- dependency groupIdcom.oracle.database.jdbc/groupId artifactIdojdbc8/artifactId version21.1.0.0/version /dependency !-- PostgreSQL -- dependency groupIdorg.postgresql/groupId artifactIdpostgresql/artifactId version42.6.0/version /dependency !-- SQL Server -- dependency groupIdcom.microsoft.sqlserver/groupId artifactIdmssql-jdbc/artifactId version12.4.0.jre11/version /dependency /dependencies2. 数据库连接工具类你只改这里 4 行DBUtil.javajava运行import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class DBUtil { // 你只改这 4 行 private static final String DB_TYPE mysql; // mysql/oracle/pg/sqlserver private static final String IP localhost; private static final String DB_NAME testdb; private static final String USER root; private static final String PASSWORD 123456; // private static String getUrl() { return switch (DB_TYPE) { case mysql - jdbc:mysql:// IP :3306/ DB_NAME ?useSSLfalseserverTimezoneUTC; case oracle - jdbc:oracle:thin:// IP :1521/ DB_NAME; case pg - jdbc:postgresql:// IP :5432/ DB_NAME; case sqlserver - jdbc:sqlserver:// IP :1433;databaseName DB_NAME ;encryptfalse; default - throw new RuntimeException(不支持的数据库); }; } public static Connection getConnection() { try { Connection conn DriverManager.getConnection(getUrl(), USER, PASSWORD); System.out.println(✅ 数据库连接成功); return conn; } catch (Exception e) { e.printStackTrace(); return null; } } public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { try { if (rs ! null) rs.close(); if (pstmt ! null) pstmt.close(); if (conn ! null) conn.close(); System.out.println(✅ 资源已关闭); } catch (Exception e) { e.printStackTrace(); } } }3. TestNG 数据库断言测试类最常用 5 种断言DbAssertTest.javajava运行import org.testng.Assert; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class DbAssertTest { private Connection conn; BeforeTest public void connect() { conn DBUtil.getConnection(); } // 数据库断言核心 Test public void testDataFromDB() { String sql SELECT username, age, status FROM user WHERE id?; // 改你的SQL try (PreparedStatement pstmt conn.prepareStatement(sql)) { pstmt.setInt(1, 1001); // 参数 ResultSet rs pstmt.executeQuery(); if (rs.next()) { // 1. 相等断言 Assert.assertEquals(rs.getString(username), zhangsan, 用户名错误); // 2. 数字断言 Assert.assertEquals(rs.getInt(age), 25, 年龄错误); // 3. 非空断言 Assert.assertNotNull(rs.getString(username), 用户名不能为空); // 4. 布尔/状态断言 Assert.assertEquals(rs.getInt(status), 1, 状态必须为启用); // 5. 真/假断言 Assert.assertTrue(rs.getInt(age) 18, 年龄必须大于18); } else { Assert.fail(❌ 未查询到数据); } } catch (Exception e) { e.printStackTrace(); Assert.fail(❌ 数据库执行失败 e.getMessage()); } } AfterTest public void close() { DBUtil.close(conn, null, null); } }
http://www.rkmt.cn/news/1413277.html

相关文章:

  • 基于偏振光原理的Arduino隐私屏幕DIY:从硬件拆解到光学加密
  • 大疆智图+Cesium:从航测到三维可视化的完整工作流(附代码避坑)
  • 2026立式离心泵技术解析:摆动转子泵/污泥回流泵/污泥转子泵/清水泵/直联泵/稠油泵/空调泵/立式离心泵/管道泵/选择指南 - 优质品牌商家
  • 当CMAQ遇上WRF飓风数据:一次完整的空气质量模拟实战配置复盘
  • VMIMO与LDPC混合解码优化IR-UWB体域网性能
  • 逆向动力学(IK):让 3D 角色“自动找到答案“的聪明魔法
  • 告别传统聚焦!用Field II仿真带你玩转合成发射孔径超声成像(附STA-VS代码)
  • Keil MDK许可证类型详解:单用户、FLF与Flex对比
  • 深入ADIC2D:手把手教你调参优化,让2D-DIC测量结果更精准
  • SteamAutoCrack:三步完成Steam游戏备份与离线运行指南
  • 降AI软件哪些是自研技术?2026年4款工具实测+深度推荐
  • Gemini新闻发布会终极备战清单:12项关键检查项、5个隐藏风险预警及3套应急预案
  • 低成本DIY数控泡沫切割机:用Arduino与PVC线槽打造个人CNC
  • Keil C251调试符号问题解析与解决方案
  • 重庆黄金回收,各平台优势一目了然 - 合扬奢侈品交易中心
  • 告别命令行恐惧!用SourceTree可视化搞定Git日常操作(附中文版设置)
  • 图形化编程实现Arduino频率扫描信号发生器
  • 光学透视AR头显无对齐校准:基于相机与对象的两种高精度方案
  • 从零打造可落地的直流电机 PID 驱动系统 (十七):三闭环直流电机驱动系统 全流程调试 Checklist
  • Linux运维排查内存故障?别只靠free了,试试memtester这个老牌工具(含10M/128M测试实例)
  • 2026开源大模型实战评测:Llama 4、Gemma 4、DeepSeek V4、GLM-5.1深度对比与选型指南
  • TimesFM动态协变量实战指南:如何将预测精度提升20%以上
  • 南宁全域黄金回收指南|7 城区门店 + 上门回收全覆盖 - 奢侈品回收测评
  • 从《视觉SLAM十四讲》出发,一文读懂拓扑地图与语义地图的现在与未来
  • 别只盯着连接!USB 2.0高速模式下的‘安静分手’:深入硬件信号层理解Disconnect检测
  • Windows 10系统下,EVE-NG模拟器安装全记录:从下载镜像到浏览器访问的保姆级排错指南
  • 从论文到白皮书:如何将arXiv预印本转化为具备商业落地力的Gemini技术白皮书(附12项转化指标对照表)
  • 从Packet Tracer登录失败到成功:一份给网络新生的思科Netacad双账号注册全流程解析
  • 基于ESP32C3与微波雷达的智能猫头鹰机器人制作全指南
  • OpenClaw无服务器部署实战:云函数实现智能网页抓取