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;
}
- Можно ли его проверить с помощью прокладок и / или заглушек, чтобы выходное значение можно было установить на конкретное значение?
- Если так, как?
- Должен ли я даже использовать модульное тестирование для этого?
Я следовал этому уроку и сумел понять и адаптировать его к дню недели.
Я жду, когда функциональность модульных тестов базы данных VS2012 станет доступна к концу 2012 года (или будет восстановлена), как прокомментировал сотрудник MS , чтобы можно было тестировать базу данных изолированно.
1 ответ
Microsoft Fakes не подходит для тестирования этого кода. Вместо этого создайте интеграционный тест. В этом тесте используйте локальный экземпляр сервера SQL, явно создайте данные, которые хранимая процедура ожидает найти в базе данных, вызовите хранимую процедуру и проверьте ее результат. Откат транзакции или удаление данных из базы данных вручную, чтобы убедиться, что они не влияют на другие тесты.