2012-10-09 48 views
1

我發現標題爲MOQ: Returning value that was passed into a method的帖子非常有幫助,因爲我可以獲取傳入的值之一以提供返回值。Moq:返回值作爲IEnumerable的值傳入方法<T>

我面臨的問題是我需要將值(一個字符串)轉換爲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()met)將字符串值賦值給IEnumerable HOD)?

更新

這是我結束了。謝謝您的幫助。希望這會幫助那些對lambda不熟悉的人。

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

回答

1

如何返回一個數組與x.Url

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

啊,你打我吧。我只是嘗試了類似的解決方案,它的工作。直到我發佈這個聲明在=>之後的數組之後,它纔開始出現。 – NightOwl888