Moq Callback для универсального метода с параметром Func - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь настроить функцию обратного вызова для универсального метода смоделированного объекта, который получает универсальный Func в качестве параметра. При этом он, кажется, не соответствует должным образом, так как обратный вызов никогда не вызывается и тест всегда завершается неудачей. Однако, если метод не имеет универсального Func, он работает. Это небольшое воспроизведение проблемы (фиктивное представление фактической проблемы):

public interface IFoo
{
    void Bar<T>(T arg, Func<T, string> func);
}

public class FooTests
{
    [Fact]
    public void Test()
    {
        var bars = new List<object>();
        var fooMock = new Mock<IFoo>();
        fooMock.Setup(x => x.Bar(It.IsAny<It.IsAnyType>(), It.IsAny<Func<It.IsAnyType, string>>()))
            .Callback((object arg, Func<It.IsAnyType, string> func) => bars.Add(arg));

        fooMock.Object.Bar(4, (x) => "");

        Assert.Single(bars); // This always results in "The collection was expected to contain a single element, but it was empty."
    }
}

Кто-нибудь имеет представление о том, что не так или это можно сделать вообще с помощью Moq?

Редактировать : Как указывали другие, эта упрощенная версия проблемы не правильно отражала реальную проблему. Я попал в эту ветку Github и опубликовал рабочий код в этом комментарии . Это не полностью решает то, что я пытался сделать в методе Callback, я хочу выполнить параметр formatter, который передается методу Log, но так как он вызывается с внутренним типом, у меня нетне нашел способ взять его из IInvocation.Arguments и выполнить.

...