Я закодировал конструктор для класса, и я проверяю, что каждый параметр равен нулю. См. пример ниже:
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
не тот код, который выполняется в разделе «Действие».
Есть ли у кого-нибудь предложения по тестированию параметров конструктора и необходимости повторного посещения модульного теста при добавлении новых параметров?