Как использовать FakeItEasy для подделки сложного анализа запроса linq в словарьC#

Место общения программистов C#
Anonymous
Как использовать FakeItEasy для подделки сложного анализа запроса linq в словарь

Сообщение Anonymous »

Я пытаюсь создать метод тестирования с использованием fakeItEasy для следующего фрагмента кода. Он запрашивает список объектов из базы данных и создает из него отдельный словарь:

Код: Выделить всё

var animals = _dataService.Query()
.Where(x => x.Species == 2
.GroupBy(i => i.Code)
.Select(i => i.FirstOrDefault())
.ToDictionary(i => i.Code, i => i);
Я настраиваю тест следующим образом:

Код: Выделить всё

// Arrange
var fakeIDataService = A.Fake();
var fakeMapper = A.Fake();

var monkey = new Animal
{
Id = 1,
Description = "Monkey",
Code = "MKY",
Species = 2
};

var animals = new Dictionary()
{
{ monkey.Code, monkey}
};

A.CallTo(() => fakeIDataService.Query()
.Where(x => x.Species == 2
.GroupBy(i => i.Code)
.Select(i => i.FirstOrDefault())
.ToDictionary(i => i.Code, i => i)
).Returns(animals);

// Act
var service = new ProcessAnimalLines(fakeIDataService, fakeMapper);

// Assert
A.CallTo(() => fakeIDataService.SaveChangesAsync()).MustHaveHappened(Repeated.Exactly.Once);
Когда отладка компилятора прерывается при попытке создать A.CallTo, возвращающий словарь животных, он даже не доходит до части действия.
Это ошибка, которую выдает визуальная студия:

Код: Выделить всё

System.ArgumentException : The specified object is not recognized as a fake object.
Это работает, получая список из базы данных и затем вручную преобразуя его в словарь, но мне бы очень хотелось все исправить сразу.

Подробнее здесь: https://stackoverflow.com/questions/789 ... dictionary

Вернуться в «C#»