【发布时间】:2016-07-20 06:05:01
【问题描述】:
我一直在我的个人项目中进行测试并遇到了这个小问题。我有一个创建对象列表的测试方法,我设置了一个在我测试的方法中使用的服务以返回模拟列表。但是,由于某种原因,设置无法正常工作并且返回 null。
这里是测试方法:
var mockList = new List<IBillItem>
{
new BillItem
{
Id = 0,
DueDate = new DateTime(),
Name = "",
IndexNumber = "",
AccountNumber = "",
Amount = decimal.One
},
new BillItem
{
Id = 0,
DueDate = new DateTime(),
Name = "",
IndexNumber = "",
AccountNumber = "",
Amount = decimal.One
}
};
_billHandlingService.Setup(x => x.GetAllBillsAsync(It.IsAny<string>())).Returns(Task.FromResult(mockList));
var listBillsVm = new ListBillsViewModel(new LoggerFactory(), _billHandlingService.Object, _settingsService.Object);
await listBillsVm.GetBillsAsync();
_billHandlingService.Verify(x => x.GetAllBillsAsync(_settingsService.Name), Times.AtMostOnce);
Assert.AreEqual(1, listBillsVm.BillsList.Count);
这里是具体类im测试的代码:
public async Task GetBillsAsync()
{
BillsList.Clear();
var bills = await _billHandlingService.GetAllBillsAsync(_settingsService.LoggerUser);
if (null != bills)
{
var billsByDate = bills.Where(x => x.DueDate == DateTime.Today).ToList();
foreach (var bill in billsByDate)
{
BillsList.Add(bill);
RaisePropertyChanged(nameof(BillsList));
}
}
}
我已尝试在 SO / google 上搜索结果,但尚未找到任何答案。提前致谢。
编辑:代码没有注释,但我相信它足够清楚,在 cmets 中询问是否有需要清除的东西
编辑2:
Task<List<IBillItem>>GetAllBillsAsync(string username);
是被调用方法的接口。
【问题讨论】:
-
尝试将
Setup中的.Returns更改为.ReturnsAsync(mockList) -
我刚刚使用您的示例重新创建了一个单元测试,并且一切正常。您使用的是什么版本的起订量?
-
起订量版本为 4.5.16。
-
我没有降到 4.5.0 并且仍然是同样的问题。这真的很奇怪。
-
我用 4.5.10.0 进行了测试,它工作正常。
标签: c# unit-testing async-await moq