[英]MSTest - Moq setup with a list parameter returns empty list
我有這樣的事情:
WebRequestManagerMock
.Setup(x => x.GetItemsAsync(It.IsAny<IEnumerable<Order>>()))
.Returns<IEnumerable<Order>>(orders => Task.FromResult<IEnumerabe<Item>>(m_Items.Take(orders.Count())));
m_Items
是我填寫的Class Initialize的靜態列表,不是空的。
調試測試時, Orders
也不為空。
當我調用GetItemsAsync
無論有多少訂單,我都會得到0個項目。
模擬也是靜態的。
我做錯了嗎?
我為您的場景重新創建了一個Minimal,Complete和Verifiable測試示例 ,並且能夠讓它通過。 看一下以下內容
[TestClass]
public class MoqSetupWithListParameterTests : MiscUnitTests {
//m_Items is a static list I filled in the Class Initialize, and is not empty.
static IEnumerable<Item> m_Items = Enumerable.Range(1, 10).Select(i => new Item());
//The mock is also static.
static Mock<IWebRequestManager> WebRequestManagerMock = new Mock<IWebRequestManager>();
[TestMethod]
public void Items_Count_Should_Equal_Orders_Count() {
//Arrange
var expected = 3;
//Orders is also not empty when I debug the test.
var m_Orders = Enumerable.Range(1, expected).Select(i => new Order());
WebRequestManagerMock
.Setup(x => x.GetItemsAsync(It.IsAny<IEnumerable<Order>>()))
.Returns<IEnumerable<Order>>(orders => Task.FromResult(m_Items.Take(orders.Count())));
var sut = WebRequestManagerMock.Object;
//Act
//When I call GetItemsAsync I get expected count.
var actual = sut.GetItemsAsync(m_Orders).Result;
//Assert
Assert.AreEqual(expected, actual.Count());
}
public interface IWebRequestManager {
Task<IEnumerable<Item>> GetItemsAsync(IEnumerable<Order> enumerable);
}
public class Order { }
public class Item { }
}
顯然我是瞎子。 我沒注意到我在TestInitialize方法中創建了我的mock的新實例。 感謝您告訴我問題出在我的代碼而不是moq中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.