如何模拟添加到 DbContext 的记录
How to mock a record getting added to the DbContext
我有这样的方法:
private void CreateTaskFromModel(ForgotPasswordViewModel fpModel)
{
var message = _dbContext.Create<Message>();
message.MessageType = "TASK".PadLeft(10);
message.Assigned_User_K = fpModel.SendPasswordRequestTo.Trim();
message.Assigned_Date = DateTime.Today;
message.Source_User_K = string.Empty;
message.Title_Focus = "Request Web Password";
_dbContext.Messages.Add(message);
}
所以我能够像这样模拟 Create
方法:
Message msg = new Message();
IMyDbContext fakeDbContext = NSubstitute.Substitute.For<IMyDbContext>();
fakeDbContext.Create<Message>().Returns(msg);
但请注意最后一行它仍然有这段代码,我不知道如何模拟这一行?
_dbContext.Messages.Add(message);
我正在使用 NSubstittue
消息类型为 DbSet<Message>
。因此,您需要创建 DbSet<Message>
的 fake/substitute 实例,并让 _dbContext.Messages
.
返回 me
Message msg = new Message();
IMyDbContext fakeDbContext = NSubstitute.Substitute.For<IMyDbContext>();
var messagesSet = NSubstitute.Substitute.For<DbSet<Message>>();
fakeDbContext.Create<Message>().Returns(msg);
fakeDbContext.Messages.Returns(messagesSet);
您也有兴趣查看是否调用了 Add。您可以在断言中执行此操作。
messagesSet.Received().Add(NSubstitute.Any<Message>());
或者如果您想测试是否从您的创建中添加了相同的实例
messagesSet.Received().Add(msg); // message created earlier in your test
我有这样的方法:
private void CreateTaskFromModel(ForgotPasswordViewModel fpModel)
{
var message = _dbContext.Create<Message>();
message.MessageType = "TASK".PadLeft(10);
message.Assigned_User_K = fpModel.SendPasswordRequestTo.Trim();
message.Assigned_Date = DateTime.Today;
message.Source_User_K = string.Empty;
message.Title_Focus = "Request Web Password";
_dbContext.Messages.Add(message);
}
所以我能够像这样模拟 Create
方法:
Message msg = new Message();
IMyDbContext fakeDbContext = NSubstitute.Substitute.For<IMyDbContext>();
fakeDbContext.Create<Message>().Returns(msg);
但请注意最后一行它仍然有这段代码,我不知道如何模拟这一行?
_dbContext.Messages.Add(message);
我正在使用 NSubstittue
消息类型为 DbSet<Message>
。因此,您需要创建 DbSet<Message>
的 fake/substitute 实例,并让 _dbContext.Messages
.
Message msg = new Message();
IMyDbContext fakeDbContext = NSubstitute.Substitute.For<IMyDbContext>();
var messagesSet = NSubstitute.Substitute.For<DbSet<Message>>();
fakeDbContext.Create<Message>().Returns(msg);
fakeDbContext.Messages.Returns(messagesSet);
您也有兴趣查看是否调用了 Add。您可以在断言中执行此操作。
messagesSet.Received().Add(NSubstitute.Any<Message>());
或者如果您想测试是否从您的创建中添加了相同的实例
messagesSet.Received().Add(msg); // message created earlier in your test