Я новичок в обеих библиотеках, и перед тем, как перейти к их использованию в большом проекте, мне нужно уточнить мои варианты автозапуска с низким уровнем кода в моих модульных тестах.Automocking with LightInject plus Nsubstitute, как?
Проведя некоторое время в Google, я пришел к выводу, что для LightInject + Nsubstitute не доступна готовая библиотека плагинов, в отличие от некоторых других пакетов IOC/Mocking, для упрощения объявления недействительных дефолтов по умолчанию этап единичного теста.
Я прочитал документы LightInject о том, как переопределить контейнер LightInject с временным расширенным макетным объектом только для области единичного теста , но как насчет всех отключений изоляции по умолчанию, которые могут быть затронуты модульным тестом. Есть ли способ автоматизировать их создание в контейнере LightInject?
Внутреннее поведение контейнера МОК я ищу это:
public class LightInject.ServiceContainer
{
..
public T GetInstance<T)
{
if ((this.RegisteredInterfaces.Any(i => i.Itype == T) == false)
&& (this.TemporaryUnitTestOverrides.Any(i => i.Itype == T) == false))
&& (/* this container is configured with an automocking delegate */))
return autoMockCreatorDelegate<T>.Invoke();
}
Похоже IProxy LightInject и перехватчики обеспечивают некоторые внутренние имитировал объект строительных блоков, но библиотека Nsubstitute является полнофункциональной по сравнению.
Уточнение того, что я имею в виду по умолчанию, не делайте ничего ложного и улучшенного макета.
// default do nothing mock
var calculator = Substitute.For<ICalculator>();
// Enhanced mock that will return 3 for .Add(1,2)
var calculator = Substitute.For<ICalculator>();
calculator.Add(1, 2).Returns(3);
Очевидно, что второй улучшенный тип макета должен быть создан локально на единичный тест.
@bernhard Благодарим за быстрый и авторитетный ответ, ваш примерный код - это именно тот тип решения, на который я надеялся. Я создам несколько прототипов модульных тестов и отчитаюсь здесь. – camelCase