Microsoft Fakes (Shims и / или Stubs) на методе aC# с кодом SQL

Я пытаюсь узнать немного больше о модульном тестировании, используя готовые функциональные возможности (я считаю, что это MSTest.exe) и Microsoft Fakes (заглушки и Shims).

Я использую 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. Должен ли я даже использовать модульное тестирование для этого?

Я следовал этому уроку и сумел понять и адаптировать его к дню недели.

Я жду, когда функциональность модульных тестов базы данных VS2012 станет доступна к концу 2012 года (или будет восстановлена), как прокомментировал сотрудник MS , чтобы можно было тестировать базу данных изолированно.

1 ответ

Microsoft Fakes не подходит для тестирования этого кода. Вместо этого создайте интеграционный тест. В этом тесте используйте локальный экземпляр сервера SQL, явно создайте данные, которые хранимая процедура ожидает найти в базе данных, вызовите хранимую процедуру и проверьте ее результат. Откат транзакции или удаление данных из базы данных вручную, чтобы убедиться, что они не влияют на другие тесты.

Другие вопросы по тегам