1.單元測試
1.白盒測試,JUnit是Java自帶的的單元測試框架. Testing測試框架
Python中的測試框架unittest,pytest ,方便組織用例
提供測試前置,后置
@Test修飾的方法是測試用例
@BeforeEach(在每個方法前執(zhí)行), @BeforeAll(在所有方法前執(zhí)行一次) 測試前置
@AfterEach, @AfterAll 測試后置
2.白盒測試,針對最小的可執(zhí)行單元進行測試,在Java中指方法
白盒測試設(shè)計技術(shù):
語句覆蓋(覆蓋度低): 每個語句執(zhí)行一次
判定覆蓋/分支覆蓋: (a<=0||b<=0||c<=0)是一個判定點,這個判定點的TRUE/FALSE至少覆蓋一次
用例1:a=0,b=1,c=1,判定的結(jié)果為TRUE
用例2:a=1,b=1,c=1,判定的結(jié)果為FALSE
條件覆蓋: (a<=0||b<=0||c<=0)是一個判定點. a<=0 是一個條件
判定點是由一個條件或者多個條件組合成的
每個條件的TRUE/FALSE至少覆蓋一次
用例1:a=0,b=1,c=1, a true b false c false 判定點的結(jié)果 TRUE
用例2:a=1,b=0,c=0, a false b true c true 判定點的結(jié)果 TRUE
用例3:a=1,b=1,c=1,a false b false c false 判定點的結(jié)果 FALSE
判定_條件覆蓋:每個條件的TRUE/FALSE至少覆蓋一次,每個判定點的TRUE/FALSE至少覆蓋一次.
組合條件覆蓋:判定點中個個條件可能的組合至少出現(xiàn)一次.
用例1:a=0,b=1,c=1, a決定判定點的結(jié)果
用例2:a=1,b=1,c=1,
用例3:a=1,b=0,c=1, b決定判定點的結(jié)果
用例4:a=1,b=0,c=0, c決定判定點的結(jié)果
路徑覆蓋(覆蓋度高): 基于流程圖的,把流程圖畫出來,覆蓋每一條路徑
覆蓋度越高,測試設(shè)計越復(fù)雜,用例越多,執(zhí)行起來耗時
最終的用例,多種測試設(shè)計方法組合在一起使用
操作sqlite數(shù)據(jù)庫,實現(xiàn)對數(shù)據(jù)庫的增刪改查功能
JDBC Mysql,sqlite有對應(yīng)的jar,maven的官網(wǎng)上下載
*/
public class SqliteDb {
//連接數(shù)據(jù)庫
private Connection connect() {
//jdbc:subprotocol:subname
// dbc: 數(shù)據(jù)庫類型:數(shù)據(jù)庫相對于工程的路徑
String url = "jdbc:sqlite:src/equ/db/equ.db";
try {
//加載類
Class.forName("org.sqlite.JDBC");
//連接數(shù)據(jù)庫
Connection conn = DriverManager.getConnection(url);
System.out.println("連接數(shù)據(jù)庫成功");
return conn;
} catch (Exception e) {
System.out.println("連接數(shù)據(jù)庫異常,異常信息為:" + e.getMessage());
}
return null;
}
//斷開數(shù)據(jù)庫連接
private void disconnect(Connection conn){
try {
conn.close();
} catch (SQLException e) {
System.out.println("連接數(shù)據(jù)庫異常,異常信息為:"+ e.getMessage());
}
}
//執(zhí)行sql語句
//執(zhí)行插入,刪除,更新類的操作,返回true/false
private boolean executeUpdate(Connection conn,String sql){
//Statement 是執(zhí)行sql語句的接口
Statement statement = null;
try {
statement = conn.createStatement();
int count = statement.executeUpdate(sql);
System.out.println("執(zhí)行sql語句成功,影響" +count+"條數(shù)據(jù)");
statement.close();
return count>=1;
} catch (SQLException e) {
System.out.println("執(zhí)行sql語句異常,異常信息為:"+ e.getMessage());
}
return false;
}
//執(zhí)行Sql語句,執(zhí)行查詢類的操作,返回查詢的結(jié)果
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){//查詢結(jié)果不為空
while(rs.next()) {
//根據(jù)列名獲取每一列的值
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");
//根據(jù)獲取的信息構(gòu)造Equ對象
Equ equ = new Equ(id,name,location,baoFei,buyTime,baoFeiTime,record);
equs.add(equ);
}
System.out.println("執(zhí)行sql語句,查詢到"+equs.size()+"條數(shù)據(jù)");
}
} catch (SQLException e) {
System.out.println("執(zhí)行sql語句異常,異常信息為:"+ e.getMessage());
}
return equs;
}
// 創(chuàng)建表
private static void initTable(){
SqliteDb db = new SqliteDb();
Connection conn = db.connect();
db.executeUpdate(conn,"create table if not exists equ(id varchar(8) primary key,"+
"name varchar(32),location varchar(32),baoFei varchar(32),buyTime varchar(32),"
+"baoFeiTime varchar(16),record varchar(128))");
db.disconnect(conn);
}ate(conn,"create table if not exists equ(id varchar(8) primary key,"+
"name varchar(32),location varchar(32),baoFei varchar(32),"+
"buyTime varchar(32),baoFeiTime varchar(16),record varchar(128))");
db.executeUpdate(conn,"insert into equ values('10002','14寸筆記本電腦','1018房間','否','2021-1-1','無','無')");
db.executeUpdate(conn,"insert into equ values('10001','14寸筆記本電腦','1018房間','是','2021-1-1','2021-2-1','2015-1-1換主板;2016-2-2增加內(nèi)存')");
db.executeUpdate(conn,"delete from equ where id='10002'");
List<Equ> equs = db.executeQuery(conn,"select * from equ;");
System.out.println(equs);
db.disconnect(conn);
SqliteDb.initTable();
Equ equ = new Equ("10005","電視","1019房間");
SqliteDb.addEqu(equ);
Equ equ1 = new Equ("10006","路由器","1019房間"
,"否","2019-4-5","無","");
SqliteDb.addEqu(equ1);
SqliteDb.deleteEqu("10001");
SqliteDb.queryAll();
|