Мы используем Autofac.Extras.Moq.AutoMock. Теперь у меня есть зависимость конструктора, используя ленивые <>Как вы можете использовать Lazy <> с AutoMock (Moq)
public MyService(Lazy<IDependency> myLazyDependency) {...}
испытать MyService
нам нужно дразнить Lazy<Dependency>
.
Я пытаюсь это с
[ClassInitialize]
public static void Init(TestContext context)
{
autoMock = AutoMock.GetLoose();
}
[TestInitialize]
public void MyTestInitialize()
{
var myDepMock = autoMock.Mock<Lazy<IDependency>>(); // <-- throws exception
}
Это исключение возвращается тестовым бегуна:
метод инициализации Tests.MyServiceTests.MyTestInitialize бросил исключение. System.InvalidCastException: System.InvalidCastException: Невозможно привести объект типа 'System.Lazy 1[IDependency]' to type 'Moq.IMocked
1 [System.Lazy`1 [IDependency]]' ..
Итак, как я могу передать Ленивый <> высмеивал объект, используя automock.
Почему бы не подделать 'IDependency', а затем перейти в' new Lazy (mockedObj) '(или, однако, он построен - я забыл)? Нет причин издеваться над «Lazy», вы не тестируете системную инфраструктуру. – Rob
Хорошая идея, но я не могу заставить ее работать. Вам нужно пройти лямбду. MockedObj не принимается. – dampee
Затем передайте что-то вроде 'new Lazy (() => mockedObj)' :) – Rob