Лучшие практики для модульных тестов, фиктивных объектов и МОК

Если Вы уже не будете, с помощью предварительно скомпилированного заголовка для включения всего, что Вы не собираетесь изменять (заголовки платформы, то внешние заголовки SDK, или статичный уже завершенные части Вашего проекта) будет иметь огромное значение во время изготовления.

http://msdn.microsoft.com/en-us/library/szfdksca (По сравнению с 71) .aspx

кроме того, хотя это может слишком опоздать в Ваш проект, организовав Ваш проект в разделы и не смешав все локальные заголовки к одному большому основному заголовку, является хорошей практикой, хотя требуется немного дополнительной работы.

5
задан alexandrul 18 May 2010 в 05:38
поделиться

2 ответа

IoC должен упростить, а не усложнить использование фиктивных объектов.

Несколько фреймворков контейнеров IoC позволят вам определять уже существующие объекты для внедрения; с Moq вы должны просто настроить его для myMockObject.Object.

РЕДАКТИРОВАТЬ: Пример настройки Unity с имитацией:

var mockService = new Mock<IMyService>();
container.RegisterInstance<IMyService>(mockService.Object);

В качестве альтернативы вы можете просто передать фиктивный объект в конструктор тестируемого класса (для внедрения конструктора) и полностью обойти контейнер IoC в ваших модульных тестах.

РЕДАКТИРОВАТЬ: Ответ Джоша является хорошим примером альтернативы. Я обычно предпочитаю его решение, а не перенастраивать контейнер.

5
ответ дан 14 December 2019 в 04:41
поделиться

Я люблю IoC, и мне нравятся некоторые имитирующие объекты ...

С этими двумя нет конфликта. Если вы выполняете какой-либо вид внедрения зависимостей, вам просто нужно создать фиктивные объекты, используя ваш любимый фреймворк для фиксации, а затем передать их в свою SUT.

[Test]
public void AnAwesomeTest()
{
    IDependencyOne d1 = MyMocker.Create<IDependencyOne>();
    IDependencyTwo d2 = MyMocker.Create<IDependencyTwo>();

    //Constructor injection
    SUT sut = new SUT(d1);

    //Property Injection
    sut.DependantProperty = d2;

    //Do some stuff and Assert
}
3
ответ дан 14 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: