[英]Mocking a stored procedure with an output parameter
我有以下方法:
public IEnumerable<string> PrintMasterBagAssignmentManifest(int companyId, int bagNo)
{
var errors = new List<string>();
try
{
if (companyId > 0 && bagNo > 0)
{
var companyNumber = companyId.ToString("D2");
var bagNumber = bagNo.ToString("D8");
DataParameter compParameter = new DataParameter("COMP", companyNumber);
DataParameter bagParameter = new DataParameter("BAG", bagNumber);
DataParameter userParameter = new DataParameter("USER", UserName);
DataParameter statusOutputParameter = new DataParameter("STATUS", "");
statusOutputParameter.Direction = System.Data.ParameterDirection.Output;
DataParameter[] param = new DataParameter[] {
compParameter,
bagParameter,
userParameter,
statusOutputParameter
};
MerretDataContext.ExecuteStoredProcedure("MBMANF", param);
if (statusOutputParameter.Value.ToString() == "E" && string.IsNullOrEmpty(statusOutputParameter.Value.ToString()))
{
errors.Add(string.Format(Resources.Resources.MASTERBAG_PRINTMANIFEST_ERROR, bagNo));
}
}
else
{
errors.Add(Resources.Resources.MASTERBAG_INVALID);
}
}
catch (Exception ex)
{
errors.Add(ex.Message);
}
return errors;
}
此方法使用 LinqToDB 調用存儲過程,我正在傳遞一個參數數組,該數組由 3 個輸入參數和一個 output 參數組成。 我在為此編寫單元測試時遇到問題。 我正在使用最小起訂量框架。
在執行時,此存儲過程將“C”或“E”存儲到 output 參數“statusOutputParameter”中。
我努力了:
const string RETURN_VALUE = "C";
DataParameter[] dp = null;
MockMerretDataContext.Setup(m => m.ExecuteStoredProcedure("MBLABL", It.IsAny<DataParameter[]>()))
.Callback((string sp, DataParameter[] cdp) =>
{
dp = cdp;
cdp[3].Value = RETURN_VALUE;
});
上面的單元測試正在通過,但我不確定如何將 C 或 E 返回到“statusOutputParameter”output 參數。
抱歉,但我一直在努力解決同樣的問題並找到了解決方案。 請嘗試使用查詢參數。
const string RETURN_VALUE = "C";
DataParameter[] dp = null;
MockMerretDataContext.Setup(m => m.ExecuteStoredProcedure("MBLABL", It.IsAny<QueryParameter[]>()))
.Callback((string sp, QueryParameter[] cdp) =>
{
// This returns the required value from @STATUS
QueryParameter[] paramArrayTemp = (QueryParameter[])cdp;
paramArrayTemp.Find<QueryParameter>(p => p.name == "@STATUS").value = RETURN_VALUE;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.