我使用的是3层架构:控制器,业务和数据层。在我的数据层中,我通过传递连接字符串和其他必要参数来调用Sql Server数据库。
我必须为Controller层和Business层编写单元测试。我想写一个存根(假存储库),我将从中返回硬编码值/结果。当我为业务层编写测试时,逻辑应该调用此存根而不是真正的数据库。
如何在业务层编写代码来实现这一目标?
业务层:
public string GetValues(string xmlData)
{
DataObject do = new DataObject ();
string result = do.GetValues(xmlData);
return result;
}
数据访问:
public static string GetValues(string xmlData)
{
return SqlHelper.ExecuteScalar(
ConfigurationManager.AppSettings["ConnectionString"].ToString(),
"DBO.usp_GetDetail",
xmlData
).ToString();
}
答案 0 :(得分:2)
为了测试您的场景,您的代码必须是可测试的。如果遵循SOLID原则,则最有可能。但是,让我们关注进行这种单元测试的必要条件:
相同的原则应适用于Controller - 业务层交互。当你坚持这两条规则(基本上缩小为SOLID的依赖性反转原则)时,你的代码将比其他方法更加单元可测试(坚持SOLID原则是总体的好主意)。
由于您可能最终会编写模拟/存根,我建议使用现有的模拟框架,如Moq或FakeItEasy。
修改 - 如果代码是紧密耦合的,您的选项仅限于: