2016-03-07 4 views
5

Мы используем 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.

+0

Почему бы не подделать 'IDependency', а затем перейти в' new Lazy (mockedObj) '(или, однако, он построен - я забыл)? Нет причин издеваться над «Lazy», вы не тестируете системную инфраструктуру. – Rob

+0

Хорошая идея, но я не могу заставить ее работать. Вам нужно пройти лямбду. MockedObj не принимается. – dampee

+0

Затем передайте что-то вроде 'new Lazy (() => mockedObj)' :) – Rob

ответ

6

Вам не нужно высмеивать Lazy, так как это часть рамки (за исключением некоторых экстремальных обстоятельств). Вы можете просто высмеять IDependency и передать объект с надписью Lazy.

Что-то, как это должно работать:

var mockDependency = autoMock.Mock<IDependency>(); 
var mockObject = mockDependency.Object; //(Not entirely sure of the property for this library) 
var mockedLazy = new Lazy<IDependency>(() => mockObject); 

Обратите внимание, что это будет означать Lazy по существу ничего не будет делать для ваших тестов (если это проблема) - это будет просто вернуть уже созданный макет, когда он впервые использовал

+1

Для тех, кого это интересует, я получил аналогичный ответ от автопроизводителей: https://github.com/autofac/Autofac.Extras.Moq/issues/3 – dampee

Смежные вопросы