我有这样的方法:
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
答案 0 :(得分:4)
消息的类型为DbSet<Message>
。因此,您需要创建DbSet<Message>
的假/替代实例,并让我通过_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