Метод для модульного тестирования метода расширения для SqlCommand - PullRequest
1 голос
/ 19 апреля 2010

Я создал метод расширения для SqlCommand, который позволяет выполнить дополнительную работу перед выполнением команды:

public static SqlDataReader ExecuteMyReader( this SqlCommand sqlCommand )
{
    // Some calculations here

    return sqlCommand.ExecuteReader();
}

Мой вопрос: каков наилучший способ модульного тестирования этого метода расширения?

Должен ли я проверить его непосредственно на базе данных?

Или я должен попытаться создать фиктивный объект? Если это так, я пытался сделать это через Moq, но, поскольку SqlCommand - это закрытый класс, я не могу его высмеять.

Ответы [ 3 ]

2 голосов
/ 19 апреля 2010

Можете ли вы вывести расчеты по их собственному методу и проверить их отдельно? Как вы выяснили, писать и выполнять модульные тесты для функций на этом уровне детализации сложно и не выгодно.

2 голосов
/ 19 апреля 2010

Если вы хотите проверить, действительно ли команда обновляет базу данных, вы бы написали интеграционный тест . Наилучшим методом проверки будет такой:

  • Настройка простой базы данных
  • Выполнить тест
  • Откат базы данных.
  • Повторите

Это хорошо, потому что это то, что тебя волнует. Если бы это было издеваться (нет смысла), что бы вы тестировали? Откуда ты знаешь, что это работает?

Единственный раз, когда вы захотите смоделировать это, для кода, который использует ваш метод расширения. Но так как вы хотите протестировать метод расширения, есть только один способ, а именно - попасть в базу данных.

0 голосов
/ 19 апреля 2010

Вы правы, говоря, что не можете проверить метод в целом.

Я не знаю природу ваших вычислений, но если их можно разделить на другую функцию, эта функция может быть проверена модулем. Это было бы полезно, чтобы убедиться, что расчет, который, как я полагаю, является основой вашей реализации, работает правильно.

...