Moq:作为值传递给IEnumerable <t> </t>的返回值

时间:2012-10-09 19:59:25

标签: lambda mocking moq

我发现标题为MOQ: Returning value that was passed into a method的帖子非常有用,因为我可以获取其中一个传入的值作为返回值。

我面临的问题是我需要将值(字符串)转换为IEnumerable作为枚举中唯一的项目,并且我正在绊倒这样做的语法。

这是我到目前为止所做的:

var aggregator = new Mock<IUrlAggregator>();
        aggregator
            .Setup(x => x.ProcessUrl(It.IsAny<IUrlFileLineInfo>()))
            .Returns((IUrlFileLineInfo x) => x.Url); <-- Need to return IEnumerable<string> here, not string

ProcessUrl签名如下所示:

IEnumerable<string> ProcessUrl(IUrlFileLineInfo urlInfo);

和IUrlFileLineInfo接口:

public interface IUrlFileLineInfo
{
    string Url { get; set; }
    string Mode { get; set; }
}

那么如何在lamba表达式的上下文中通过.Returns()方法将字符串值转换为IEnumerable?

更新

这就是我最终的结果。谢谢您的帮助。希望这将有助于其他不熟悉lambdas的人。

var aggregator = new Mock<IUrlAggregator>();
        aggregator
            .Setup(x => x.ProcessUrl(It.IsAny<IUrlFileLineInfo>()))
            .Returns((IUrlFileLineInfo x) => new List<string>() { x.Url });

1 个答案:

答案 0 :(得分:1)

如何使用一个项x.Url返回数组?

var aggregator = new Mock<IUrlAggregator>();
        aggregator
            .Setup(x => x.ProcessUrl(It.IsAny<IUrlFileLineInfo>()))
            .Returns((IUrlFileLineInfo x) => new [] { x.Url });