Я закодировал конструктор для класса, и я тестирую для каждого параметра, равным нулю. Смотрите пример ниже:.Единичный тест Null Parameters in Constructor
public MyClass(IObjectA objA, IObjectB objB) : IMyClass
{
if (objA == null)
{
throw new ArgumentNullException("objA");
}
if (objB == null)
{
throw new ArgumentNullException("objB");
}
...
}
Обычно я модульное тестирование (с помощью Moq) это, дразня из IObjectA
и IObjectB
и передавая их в приведенном выше примере будет создать 2 модульных тестов для проверки каждого сценария.
Проблема заключается в том, когда в конструктор передается третий параметр. Это требует, чтобы я изменил свои предыдущие тесты, так как внезапно я получил исключение типа «Нет конструктора для MyClass имеет 2 параметра».
Я также использую AutoMockContainer. По сути, я хотел бы иметь возможность протестировать конструктор, зарегистрировав нулевой объект в контейнере. Например:
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void ConstructionThrowsExceptionForNullObjA()
{
// Arrange.
var container = new AutoMockContainer(new MockRepository(MockBehavior.Default));
container.Register<IObjectA>(null);
// Act.
var sut = container.Create<MyClass>();
}
Тогда неважно, сколько новых параметров добавляется к конструктору. Мне не придется обновлять свои модульные тесты.
К сожалению, вышеуказанные единицы испытаний проходят. Но по неправильной причине. Метод Register<T>()
выдает ArgumentNullException
не код, выполняемый в разделе «Действие».
Есть ли у кого-нибудь предложение проверить параметры конструктора и не переустанавливать единичный тест при добавлении новых параметров?
Если вы явно тестируете конструктор, то тест должен будет изменение при изменении контракта конструктора. То же самое относится к любой проверенной функции. Боюсь, это жизнь. –
Вы используете контейнер IoC в своем приложении, чтобы вводить depdencies в этот класс?если это так, задайте вопрос о значении письма (и, следовательно, необходимо его поддерживать), во многих тестах (может быть сотни), которые проверяют вашу инфраструктуру. В одном из решений, над которым я работал, было много тысяч тестов, проверяющих нулевые аргументы ctor, и это стало кошмаром для поддержания. – Matt
@Matt, к сожалению, мой клиент хочет 100% -ный охват тестированием. Я не суетился о тестах и не тестировал подобные вещи или проводку. Мне нравится программировать оборонительно, но иногда, когда я работаю в местах, пытающихся достичь 100% -ного охвата, я чувствую, что я просто делаю все для себя. –