[英]How to write mock unit test case for ExecuteNonQuery & ExecuteScalar & GetDataSet method
我正在為我的應用程序編寫一個單元測試用例。在我的應用程序中,我正在使用SQLite datebase。我想模擬以下方法。例如,ExecuteNonQuery,ExecuteScalar,GetDataSet。我在下面編寫我的方法。
請任何人幫助我為以下方法編寫模擬單元測試用例。
ExecuteNonQuery
using (SQLiteConnection objCon = objISQLite.OpenConnection(DBNAME))
{
objCon.Open();
using (SQLiteCommand objCmd = new SQLiteCommand(strSQL, objCon))
{
intRetValue = objCmd.ExecuteNonQuery();
objCmd.Dispose();
}
objCon.Close();
objCon.Dispose();
}
執行標量
using (SQLiteConnection objCon = OpenConnection(DBNAME))
{
objCon.Open();
using (SQLiteCommand objCmd = new SQLiteCommand(strSQL, objCon))
{
objRetValue = objCmd.ExecuteScalar();
objCmd.Dispose();
}
objCon.Close();
objCon.Dispose();
}
GetDataSet
using (DataSet dsData = new DataSet())
{
using (SQLiteConnection objCon = OpenConnection(DBNAME))
{
objCon.Open();
using (SQLiteDataAdapter objAdp = new SQLiteDataAdapter(strSQL,objCon))
{
dsData.Reset();
objAdp.Fill(dsData);
objAdp.Dispose();
}
objCon.Close();
objCon.Dispose();
}
return (#Dataset);
}
您可能要應用依賴關系反轉原則,該原則規定您應該依賴抽象,而不是依賴於具體概念。
這是SOLID首字母縮略詞的“ D”(有關SOLID編程,請參見此鏈接 ;有關依賴關系反轉原理,請參見此鏈接 )
在這里,您將SQLite的具體用法與數據庫訪問緊密結合在一起。
在您使用的類中,您應該依賴於將模擬的數據庫訪問的抽象(我們將其命名為DatabaseManager)。
此外,您將更喜歡使用接口(例如,IDbCommand優於SQLiteCommand,...),因為這更易於維護,對您的意圖更明確,並且更易於模擬。
例如,您的代碼可能會變成類似以下內容:
interface IDatabaseManager
{
IDbConnection OpenConnection(string databaseName);
IDbCommand CreateCommand(string command, IDbConnection connection);
}
class MyClass
{
private IDatabaseManager _databaseManager;
public MyClass(IDatabaseManager databaseManager)
{
_databaseManager = databaseManager;
}
public void ExecutScalarMethod()
{
using (var objCon = _databaseManager.OpenConnection(DBNAME))
{
objCon.Open();
using (SQLiteCommand objCmd = _databaseManager.CreateCommand(strSQL, objCon))
{
objRetValue = objCmd.ExecuteScalar();
objCmd.Dispose();
}
objCon.Close();
objCon.Dispose();
}
}
}
通過在您的類中注入DbManager的抽象,您可以減少類與數據庫(此處為SQLite)的具體用法之間的耦合,從而提高其單元可測試性。
對該類進行單元測試變得很容易,因為您只需傳遞IDatabaseManager的模擬即可,該模擬將設置為返回IDbConnection和IDbCommand的模擬以驗證您的斷言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.