Я не уверен, что то, что я делаю, на самом деле является «правильным» способом проведения модульных тестов с помощью DI. Прямо сейчас я прошу свой ViewModelLocator фактически создать все экземпляры, которые мне нужны, и просто получить экземпляр, который мне нужно протестировать, что очень просто проверить один экземпляр, поскольку позволяет предположить, что квитанция нуждается в создании объекта реселлера, который необходим реселлеру пользовательский объект, который должен быть создан, пользователю нужен какой-то другой объект, который будет создан, что создает цепочку объектов для создания только для проверки одного экземпляра.Неплохая идея использовать объекты инъекции зависимостей в модульных тестах?
С интерфейсами di usally будут издеваться и разбираться с объектом, который вы хотели бы создать, но как насчет простых объектов/ViewModels?
Какова наилучшая практика проведения модульных испытаний с участием DI?
public class JournalTest
{
private ReceiptViewModel receipt;
private ViewModelLocator locator;
[SetUp]
public void SetUp()
{
locator = new ViewModelLocator();
receipt = SimpleIoc.Default.GetInstance<ReceiptViewModel>();
}
[TearDown]
[Test]
public void CheckAndCreateNewJournal_Should_Always_Create_New_Journal()
{
receipt.Sale.Journal = null;
receipt.Sale.CheckAndCreateNewJournal();
Assert.NotNull(receipt.Sale.Journal);
}
}
Мне любопытно, почему ваша бизнес-логика позволяет установить «Журнал» в «null» и иметь «метод инициализации» 'CheckAndCreateNewJournal()'?Либо ваш журнал является обязательным, и вы инициализируете пустой журнал в своем конструкторе Sale (предпочтительно в поле для чтения в режиме чтения) и гарантируете его инвариантность, или вы создаете и возвращаете его, когда впервые вызывается getterGenerator, если поле поддержки 'null', но тогда вы не можете гарантировать, что инварианты класса. Инициализаторы - это запах кода и намек на плохой дизайн API – Tseng