Я хочу лучше использовать NUnit для тестирования приложений, которые я пишу, но я часто нахожу, что написанные мной модульные тесты имеют прямую ссылку на среду или базовую базу данных на компьютере разработчика.
Позвольте мне привести пример.
Я пишу класс, который несет единоличную ответственность за извлечение строки, которая была сохранена в реестре другим приложением. Ключ хранится в HKCU \ Software \ CustomApplication \ IniPath.
Тест, который я заканчиваю писать, выглядит так:
[Test]
public void GetIniDir()
{
RegistryReader r = new RegistryReader();
Assert.AreEqual(@"C:\Programfiles\CustomApplication\SomeDir", r.IniDir);
}
Но проблема здесь в том, что строка @ "C: \ Programfiles \ CustomApplication \ SomeDir" действительно сейчас правильная. Завтра он может измениться на @ "C: \ Anotherdir \ SomeDir", и это внезапно нарушит мои модульные тесты, даже если код не изменился.
Эта проблема также наблюдается, когда я создаю класс, который выполняет операции CRUD с базой данных. Данные в базе данных могут все время меняться, а это, в свою очередь, приводит к провалу тестов. Поэтому, даже если мой класс сделает то, для чего он предназначен, он потерпит неудачу, потому что база данных вернет больше клиентов, чем было, когда я изначально писал тест.
[Test]
public void GetAllCustomersCount()
{
DAL d = new DAL();
Assert.AreEqual(249, d.GetCustomerCount());
}
Ребята, есть ли у вас какие-либо советы по написанию тестов, которые не так сильно зависят от окружающей среды?