我有以下方法
public bool IsUserAllowedToDoThings(string userName, string thingToDo)
{
var outputParameter = new ObjectParameter("IsAllowed", typeof(bool?));
_context.SP_IsUserAllowedToDoThings(userName, thingToDo, outputParameter);
return (bool)outputParameter.Value;
}
该方法只使用EF调用SP并返回SP的输出结果。但我在模拟SP的单元测试输出方面遇到了问题。 附:我正在使用MOQ框架进行模拟。
答案 0 :(得分:3)
在第三次阅读MOQ手册后,我终于找到了这样做的方法。这简直太简单了:
mockObjectContext.Setup(m => m.SP_IsUserAllowedToDoThings(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<ObjectParameter>())).Callback<string, string, ObjectParameter>((a, b, c) =>
{
c.Value = true;
});
答案 1 :(得分:0)
即使我有类似的方法:
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个输入参数和一个输出参数组成。我在为此编写单元测试时遇到问题。我正在使用MOQ框架。