單元測試輔助類
發(fā)表時間:2024-02-15 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
下面是數(shù)據(jù)文本文件的格式 “#”號是注釋
“T:”是加入
“D:”是刪除表里面的數(shù)據(jù)
“C:”是檢查數(shù)據(jù)
數(shù)據(jù)與數(shù)據(jù)之間用TAB隔開(可以從企業(yè)管理器直接把數(shù)據(jù)拷貝出來作為數(shù)據(jù)源)
加入數(shù)據(jù)的事列如下:
#插入用戶表
# null為插入空
T:Users
John <TAB>John chan
Cake<TAB>Cake.lu
jeff<TAB>jeff.hu
# CheckTable's Data
#null為檢查是否為空,skip掉過不檢查,notnull檢查他是否不為空
C:Users
John <TAB>John chan
Cake<TAB>Cake.lu
jeff<TAB>jeff.hu
#Delete All Data
D:TAbleName
調(diào)用代碼:
參數(shù)1:文本文件的路徑
參數(shù)2:是Helper里面的兩個常量(其實可以是個Enum,不過寫的時候沒有注意)
Helper.ExecuteAction("Data.txt",Helper.INSERT);
參數(shù)3:是指定對那個對象操作(T:D:C:后面的名稱,如T:Users,那么就填Users)
Helper.ExecuteACtion("Data.txt",Helper.Insert,"Users")
代碼如下:
using System;
using System.Data;
using System.IO;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
using NUnit.Framework;
namespace TestCore
{
public class Helper
{
public const string DELETE="D";
public const string INSERT="T";
public const string CHECK="C";
public const string ANNOTATE="#";
public static string ConnectionString
{
//這里要寫返回的連接字符串
get{return null;}
}
public static void ExecuteAction(string path,string action)
{
ExecuteAction(path,action,null);
}
public static void ExecuteAction(string path,string action,string inputTable)
{
Console.WriteLine("----------------"+action+" action is Start--------------------");
StreamReader reader=new StreamReader(path);
string line;
string table=null;
try
{
while(true)
{
line =reader.ReadLine();
if(line==null)
break;
if(line.Length==0)
continue;
string Key=line.Substring(0,1);
if(Key==action)
{
table=line.Substring(2);
if(action==DELETE)
{
if(CheckTable(inputTable,table))
{
Delete(table);
}
table=null;
}
else
{
continue;
}
}
else if(table!=null)
{
switch(action)
{
case INSERT:
if(CheckTable(inputTable,table))
{
string[] datas=line.Split('\t');
AddData(datas,table);
}
break;
case CHECK:
if(CheckTable(inputTable,table))
{
string[] checkDatas=line.Split('\t');
Check(checkDatas,table);
}
break;
}
table =null;
}
else
{
continue;
}
}
}
finally
{
Console.WriteLine("----------------"+action+" action is End--------------------");
reader.Close();
}
}
private static bool CheckTable(string inputTable,string SettingTable)
{
if(inputTable==null)
return true;
return (inputTable==SettingTable);
}
private static void Delete(string table)
{
string sql=" delete from "+table;
Console.WriteLine(sql);
try
{
SqlHelper.ExecuteNonQuery(ConnectionString,CommandType.Text,sql);
}
catch(Exception e)
{
throw new ApplicationException("刪除錯誤:Sql是"+sql,e);
}
}
private static void AddData(string[] data,string table)
{
SqlConnection conn=new SqlConnection(ConnectionString);
string sql="insert into "+table+" values ";
string temp="('"+data[0]+"'";
for(int i=1;i<data.Length;i++)
{
if(data[i]!="null")
temp+=",'"+data[i]+"'";
else
temp+=",null";
}
sql+=temp+")";
conn.Open();
try
{
Console.WriteLine(sql);
SqlCommand comm =new SqlCommand(sql,conn);
comm.ExecuteNonQuery();
}
catch(Exception e)
{
throw new ApplicationException(table+":"+sql,e);
}
finally
{
conn.Close();
}
}
private static void Check(string[] data,string table)
{
string sql="select * from "+table;
Console.WriteLine(sql);
DataSet ds = SqlHelper.ExecuteDataset(Helper.ConnectionString,CommandType.Text,sql);
DataTable dt=ds.Tables[0];
if(dt.Rows.Count==0)
throw new ArgumentOutOfRangeException( sql+" 返回結(jié)構(gòu)為空");
foreach(DataRow dr in dt.Rows)
{
for(int i=0;i<data.Length;i++)
{
if(data[i].ToLower()=="skip")
continue;
if(data[i].ToLower()=="null")
{
Assert.IsTrue(dr[i].Equals(DBNull.Value),"expect is null ,but it's not null actualy");
continue;
}
if(data[i].ToLower()=="notnull")
{
Assert.IsFalse(dr[i].Equals(DBNull.Value),"expect isn't null but it's null actualy");
continue;
}
if(data[i].Length>=4 && data[i].Substring(0,4).ToLower()=="not:")
{
string txtValue=data[i].Substring(4).ToLower().Trim();
string dbValue=dr[i].ToString().ToLower().Trim();
Assert.IsTrue(txtValue!=dbValue,"db value is the same as data in text file,text file value is "+txtValue);
continue;
}
if(dr[i].ToString().Length!=0 dr[i].Equals(DBNull.Value))
{
Assert.IsTrue(dr[i].ToString()==data[i],table+":Check Value Is "+data[i]+",but DB is "+dr[i]);
continue;
}
}
}
}
}
}