Ми використовуємо StructureMap в новому проекті розробки програмного забезпечення. Один з членів команди здійснив тестовий модуль, який в основному тестує конфігурацію контейнера StructureMap . Це роблять, роблячи наступне;
- Підраховує кількість екземплярів збірок, налаштованих для класів у нашому просторі імен додатків.
- Визначає очікувані екземпляри на рівні класу
- Стверджує, що очікувані екземпляри відповідають загальній кількості знайдених примірників.
- Стверджує, що очікувані екземпляри відповідають тим, що визначені в тесті
Прикладом цього є;
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
У нас також є «одиничні тести» для наступного класу;
public MyClass(IEnvironmentRepository environmentRepository)
{
}
У цих тестах ми знущаємось над IEnvironmentRepository, тому не вводимо його з контейнера, як це відбудеться в живій системі.
Колега проігнорував тест одиниці на конфігурації структури структури з коментарем у рядку "Тест на модуль перевіряє лише власну конфігурацію". Очевидно, це було тестом і, на мою думку, цілком справедливо. Я попросив хлопця, який проігнорував тест, видалити конфігурацію структури структури IEnvironmentRepository(при цьому тест все ще ігнорується) і запустити повний тестовий набір модулів, і всі вони пройшли. Потім ми запустили додаток, і воно перекинулося, оскільки конфігурація контейнера тепер була недійсною. На мою думку, це довело цінність тесту, мій колега все-таки не погодився. Він просто заявив, що ми не повинні тестувати конфігурацію, але вважаю, що це добре в межах компетенції одиничного тесту.
Отже, низка питань;
- Це дійсний тестовий модуль - ми перевіряємо конфігурацію нашого контейнера, не працює ця структура структури (але я бачу перекриття)
- Якщо ні, то як можна перевірити конфігурацію, не тестуючи її. Як можна зупинити, щоб хтось випадково видалив потрібний рядок коду та перевірив його?
- Чи повинен
MyClassтест модуля вирішити екземплярIEnvironmentRepositoryз контейнера і передати його в?