Мы используем StructureMap в новом проекте по разработке программного обеспечения. Один из членов команды реализовал модульный тест, который в основном проверяет конфигурацию контейнера StructureMap . Это делается следующим образом;
- Подсчитывает количество экземпляров сборок, настроенных для классов в нашем пространстве имен приложения.
- Определяет ожидаемые экземпляры на уровне класса
- Утверждает, что ожидаемые экземпляры соответствуют общему количеству найденных экземпляров.
- Утверждает, что ожидаемые экземпляры соответствуют определенным в тесте
Примером этого является;
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
У нас также есть «модульные тесты» для следующего класса;
public MyClass(IEnvironmentRepository environmentRepository)
{
}
В этих тестах мы издеваемся над IEnvironmentRepository, поэтому не будем вставлять его из контейнера, как это происходит в работающей системе.
Коллега проигнорировал юнит-тест в конфигурации structmap с комментарием в строке «Юнит-тест только проверяет свою собственную конфигурацию». Это было очевидно целью теста и, на мой взгляд, совершенно справедливо. Я попросил парня, который проигнорировал тест, удалить конфигурацию структуры карты IEnvironmentRepository
(тест пока игнорируется) и запустить полный набор модульных тестов, все они прошли. Затем мы запустили приложение, и оно упало, потому что конфигурация контейнера стала недействительной. На мой взгляд, это доказало ценность теста, мой коллега все же не согласился. Он просто заявил, что мы не должны тестировать конфигурацию, но я считаю, что это вполне в рамках юнит-теста.
Итак, ряд вопросов;
- Является ли это действительным модульным тестом - мы тестируем конфигурацию нашего контейнера, а не то, что Structuremap работает (но я вижу наложение)
- Если нет, как вы можете проверить конфигурацию, не проверяя ее. Как вы можете остановить кого-то случайно удалить необходимую строку кода и проверить его?
- Должен ли
MyClass
модульный тест разрешить экземплярIEnvironmentRepository
из контейнера и передать его?