Лямбда-функция, вызывающая ошибку компилятора с 0 аргументами, исключение с 1 или более - PullRequest
3 голосов
/ 02 апреля 2019

Я использую лямбда-функцию в среде 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();
}

Похоже, мои два вариантабросить исключение или не скомпилировать.Я не уверен, что я могу сделать здесь.Если я что-то упустил, пожалуйста, дайте мне знать.

1 Ответ

3 голосов
/ 02 апреля 2019

Учитывая определение макета интерфейса, просто наберите .ReturnsAsync(existingList); и тип будет выведен.

static UnitTest1()
{
    MockObject = new Mock<IMyClass>();
    var existingList = new List<DifferentClass>();
    MockObject
        .Setup(o => o.GetList())
        .ReturnsAsync(existingList);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...