【发布时间】:2013-04-09 21:16:10
【问题描述】:
如果以前有人问过这个问题,请原谅。 我正处于搜索示例返回太多结果让我感到困惑的阶段。
我是 Rhino 模拟的新手,我知道有很多示例,但界面 - 虚拟推荐让我感到困惑。
如果我的课程运行良好(但我必须对每一行代码进行单元测试),我是否必须调整我的代码以满足单元测试的要求?还是应该反过来?
说到重点,我有以下课程,我想模拟一下。
public class DatabaseOperation
{
public IList<T> GetRecords<T>(string connectionString, string storedProcedureName)
{
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = storedProcedureName;
var reader = command.ExecuteReader();
var fillSelection = new FillSelection<T>();
return fillSelection.GetSelection(reader);
}
}
}
}
我该怎么做?
【问题讨论】:
-
你必须在停止单元测试的地方画一条线。就我个人而言,我倾向于将上述标准样板代码视为不需要测试。如果您必须“测试”它,您需要模拟 SQLConnection 并将其注入到此代码中,这样您就可以测试您的代码如何与之交互。但我认为这将是浪费时间。更重要的问题是你怎么知道 SP 做了它应该做的事情。
-
问题是代码是用代码质量控制来监控的,对于非技术用户来说,这个工具的结果是唯一的参考。如果我不对所有代码进行单元测试,那么质量指示器将为红色。所以我必须测试它。 (这是与数据库交互的许多其他代码的一部分,所以我希望有一个解决方案,并尝试找出其余的。
-
然后以某种方式将 SqlConnection 的 Mock 注入代码中。您将不得不屈服于代码以使其可测试 - 这是没有意义的。但是,如果您无法向您的“客户”解释这一点,那么您别无选择。如果我没记错的话,SqlConnection 上有一个 IDbConnection 接口,这可能是 Mock 的基础。
-
您应该修改您的指标以将这种情况考虑在内,至少就代码覆盖率而言。这比对 .NET 框架进行单元测试要好。
标签: c# unit-testing nunit rhino-mocks