Я использую лямбда-функцию в среде C # .NET CORE с Moq.Более конкретно, я использую его в методе установки, например, так:
MockObject.Setup(o => o.GetList()).Returns<List<DifferentClass>>(() => Task.FromExisting(existingList));
Проблема в вызове .Returns ().Если я использую пустую лямбду, я получаю следующее сообщение об ошибке компилятора:
error CS1593: Delegate 'Func<List<DifferentClass>, Task<List<DifferentClass>>>' does not take 0 arguments.
Это означает, что мне нужно добавить аргумент к лямбде.Я делаю это следующим образом:
MockObject.Setup(o => o.GetList()).Returns<List<DifferentClass>>(o => Task.FromExisting(existingList));
Теперь вместо ошибки компилятора выдается исключение:
System.ArgumentException : Invalid callback. Setup on method with 0 parameter(s) cannot invoke callback with different number of parameters (1).
Трассировка стека ссылается на одну и ту же строку кода.
Вот пример кода:
Тесты:
public class UnitTest1
{
static readonly Mock<IMyClass> MockObject;
static UnitTest1()
{
MockObject = new Mock<IMyClass>();
var existingList = new List<DifferentClass>();
// Line causing exception below
MockObject.Setup(o => o.GetList()).Returns<List<DifferentClass>>(() => Task.FromExisting(existingList));
}
// Tests go here...
[Fact]
Test1()
{
//...
}
}
Вот смоделированный класс, IMyClass:
public interface IMyClass
{
Task<List<DifferentClass>> GetList();
}
Похоже, мои два вариантабросить исключение или не скомпилировать.Я не уверен, что я могу сделать здесь.Если я что-то упустил, пожалуйста, дайте мне знать.