3

我正在尝试更多地了解单元测试,使用开箱即用的功能(我相信它是 MSTest.exe)和 Microsoft Fakes(存根和垫片)。

我正在使用 Visual Studio 2012 Ultimate 和 .Net 4.5 Framework。

给定以下代码,该代码调用返回单个输出值的存储过程 (SQL Server)(为简单起见):

public string GetSomeDatabaseValue()
{
    string someValue = String.Empty;

    SqlParameter paramater = new SqlParameter();
    paramater.ParameterName = "@SomeParameter";
    paramater.Direction = ParameterDirection.Output;
    paramater.SqlDbType = SqlDbType.NVarChar;
    paramater.Size = 50;  

    try
    {
        using(SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connection"].ConnectionString))
        {
            using (SqlCommand command = new SqlCommand())
            {
                command.Connection = connection;
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "SomeStoredProcedure";
                command.Parameters.Add(paramater);

                connection.Open();
                command.ExecuteNonQuery();

                if (command.Parameters["@SomeParameter"] != null)
                {
                    someValue= Convert.ToString(command.Parameters["@SomeParameter"].Value);
                }
            }
        }
    }
    catch(SqlException)
    {
        throw;
    }

    return someValue;
}
  1. 是否可以使用垫片和/或存根对其进行测试,以便将输出值设置为特定值?
  2. 如果有怎么办?
  3. 我什至应该为此使用单元测试吗?

我已按照本教程进行操作,并设法理解并使其适应星期几。

正如一位 MS 员工所说,我正在等待VS2012数据库单元测试功能在 2012 年底可用(或恢复),以便可以单独测试数据库。

4

1 回答 1

0

Microsoft Fakes 不是测试此代码的合适工具。而是创建一个集成测试。在此测试中,使用 SQL 服务器的本地实例,显式创建存储过程期望在数据库中找到的数据,调用存储过程并验证其结果。回滚事务或手动从数据库中删除数据,以确保它不会影响其他测试。

于 2012-11-16T16:27:05.713 回答