【发布时间】:2021-11-06 12:51:46
【问题描述】:
我正在尝试使用 Moq 测试 API 服务并收到错误消息:
值不能为空。 (参数“来源”)。
以下是代码[在现实世界中已经运行良好,Mock 是一个回顾性项目。]
models = new List<MyModel> {
new MyModel
{
Id = 1,
Name = "John Smith",
Status = "Engineer",
Centre = 9999
},
new MyModel
{
Id = 2,
Name = "Jane Doe",
Status = "Manager",
Centre = 9999
} };
var mockDbSet = new Mock<DbSet<MyModel>>();
mockDbSet.As<IQueryable<MyModel>>().Setup(m => m.Provider).Returns(models.AsQueryable().Provider);
mockDbSet.As<IQueryable<MyModel>>().Setup(m => m.Expression).Returns(models.AsQueryable().Expression);
mockDbSet.As<IQueryable<MyModel>>().Setup(m => m.ElementType).Returns(models.AsQueryable().ElementType);
mockDbSet.As<IQueryable<MyModel>>().Setup(m => m.GetEnumerator()).Returns(models.GetEnumerator());
mockDbSet.Setup(m => m.Add(It.IsAny<MyModel>())).Callback<MyModel>(models.Add);
mockContext = new Mock<LiveDbContext>();
mockContext.Setup(m => m.Add(models)).Callback<DbSet<MyModel>>(mockDbSet.Object.AddRange);
myService = new LiveService(mockContext.Object);
var result = myService.GetStaffByCentre(9999).Result.ToList();
//Assert
Assert.AreEqual(1, result.Count);
似乎导致错误的行是
var result = myService.GetStaffByCentre(9999).Result.ToList();
【问题讨论】:
-
附加调试器,它会快速显示是什么引发了异常。如果您无法做到,请分享堆栈跟踪,这样我们就不必猜测了。