在单元测试:
1、白盒测试,JUnit是java自带的单元测试框架。Testng测试框架。
python中测试框架unittest、pytest,方便组织用例
提供测试前置、后置
@Test 修饰的方法是测试用例。
@BeforeEach(在每个方法前执行的)、@BeforeAll(在所有方法前执行一次)测试前置
@AfterEach、@AfterAll 测试后置
2、白盒测试,针对最小的可执行单位进行测试。java中指方法。
白盒测试设计技术:
语句覆盖(覆盖度低):每个语句至少执行一次。
判断覆盖/分支覆盖:(a<=0||b<=0||c<=0)是一个判定点。这个判定点的true/false至少覆盖一次。
用例1:a=0,b=1,c=1 判定点的结果为true:
用例2:a=1,b=1,c=1 判定点的结果为false。(两个用例达到判定效果)
条件覆盖:(a<=0||b<=0||c<=0)是一个判定点。a<=0是一个条件。
判定点是由一个条件或多个条件组合成的。
每个条件的true/false至少覆盖一次。
用例1:a=0,b=1,c=1 a true b false c false 判定点的结果:true
用例2:a=1,b=0,c=0 a false b true c true 判定点的结果:true
用例3:a=1,b=1,c=1 a false b false c false 判定点的结果:false。
判断-条件覆盖:每个条件的true、false至少覆盖一次:每个判定点的true、false至少覆盖一次。
组合条件覆盖:判定点中各个条件可能的组合至少出现一次。
用例1:a=0,b=1,c=1 a决定判定点的结果
用例2:a=1,b=1,c=1
用例3:a=1,b=0,c=1 b决定判定点的结果
用例4:a=1,b=1,c=0 c决定判定点的结果
路径覆盖(覆盖度最高):基于流程图,把流程图画出来,覆盖每一条路径。
覆盖度越高,测试设计越复杂,用例越多,执行起来耗时。
最终的用例,多种测试设计方法组合在一起使用。
package equ.model;
/*
设备信息的类,属性与数据库中字段一致
增加get/set
*/
public class Equ {
private String id;
private String name;
private String location;
private String baoFei;
private String buyTime;
private String baoFeiTime;
private String record;
//只设置前三个,后面给默认值,简化设备录入
public Equ(String id, String name, String location) {
this.id = id;
this.name = name;
this.location = location;
this.baoFei = "否";
this.buyTime = "2021-3-15";
this.baoFeiTime = "2099-1-1";
this.record = "无";
}
public Equ(String id, String name, String location, String baoFei, String buyTime, String baoFeiTime, String record) {
this.id = id;
this.name = name;
this.location = location;
this.baoFei = baoFei;
this.buyTime = buyTime;
this.baoFeiTime = baoFeiTime;
this.record = record;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getBaoFei() {
return baoFei;
}
public void setBaoFei(String baoFei) {
this.baoFei = baoFei;
}
public String getBuyTime() {
return buyTime;
}
public void setBuyTime(String buyTime) {
this.buyTime = buyTime;
}
public String getBaoFeiTime() {
return baoFeiTime;
}
public void setBaoFeiTime(String baoFeiTime) {
this.baoFeiTime = baoFeiTime;
}
public String getRecord() {
return record;
}
public void setRecord(String record) {
this.record = record;
}
@Override
public String toString() {
return "Equ{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", location='" + location + '\'' +
", baoFei='" + baoFei + '\'' +
", buyTime='" + buyTime + '\'' +
", baoFeiTime='" + baoFeiTime + '\'' +
", record='" + record + '\'' +
'}';
}
}
public class SqliteDb {
// 连接数据库
private Connection connect() {
// jdbc:subprotocol:subname
// jdbc:数据库类型:数据库相对于工程的路径
String url = "jdbc:sqlite:src/equ/db/equ.db";
try {
// 加载类
Class.forName("org.sqlite.JDBC");
// 连接数据库
Connection conn = DriverManager.getConnection(url);
System.out.println("连接数据库成功");
return conn;
} catch (Exception e) {
System.out.println("连接数据库异常,异常信息为:" + e.getLocalizedMessage());
}
return null;
}
// 断开数据库
private void disconnect(Connection conn) {
try {
conn.close();
} catch (SQLException e) {
System.out.println("断开数据库异常,异常信息为:" + e.getMessage());
}
}
// 执行sql语句,执行插入、删除、更新类的操作,返回true/false
private boolean executeUpdate(Connection conn,String sql) {
// Statement是执行sql语句的接口
Statement statement = null;
try {
statement = conn.createStatement();
int count = statement.executeUpdate(sql);
System.out.println("执行sql语句成功,影响" + count + "条数据");
statement.close();
return count >= 1;
} catch (SQLException e) {
System.out.println("执行sql语句异常,异常信息为:" + e.getMessage());
}
return false;
}
// 执行sql语句,执行查询类的操作,返回查询的结果
private List<Equ> executeQuery(Connection conn, String sql) {
List<Equ> equs = new ArrayList<>();
Statement statement = null;
try {
statement = conn.createStatement();
ResultSet rs = statement.executeQuery(sql);
if (rs != null) { // 查询结果不为空
while (rs.next()) {
// 根据列明获取每一列的值
String id = rs.getString("id");
String name = rs.getString("name");
String location = rs.getString("location");
String baofei = rs.getString("baofei");
String buyTime = rs.getString("buyTime");
String baoFeiTime = rs.getString("baoFeiTime");
String record = rs.getString("record");
// 根据获取的信息构造Equ对象
Equ equ = new Equ(id, name, location, baofei, buyTime, baoFeiTime, record);
equs.add(equ);
}
System.out.println("执行sql语句,查询到" + equs.size() + "条数据");
}
} catch (SQLException e) {
System.out.println("执行sql语句异常,异常信息为:" + e.getMessage());
}
return equs;
}
|