我想知道是否有人知道SaveChanges()在模拟DbContext使用 Moq时返回 0 以外的值的方法。SaveChanges()如果 Saved 或 UnSaved 更改的项目数量小于或大于预期的更改数量,我经常在我的代码中使用以抛出错误。
根据我使用 Moq 的经验,DbContext.SaveChanges()如果您不调用数据库,它看起来不会做任何事情。
2016 年 9 月 8 日更新
Jeroen Heier 和 Nkosi 的建议有助于提供解决方案。我应该更深入地研究 Mock 并意识到这SaveChanges()是一个虚拟的(废话!)。作为参考,我将添加下面的代码来演示我在做什么。需要注意的一件事是,如果您的业务逻辑取决于保存到数据库的项目数,您需要定义一个回调来保存更改DbContext.Setup().Callback(() => { /* do something */})。使用回调,您可以跟踪调用保存更改的预期次数,并在测试中断言它们。
PostService 类中的“SavePost”方法
public PostViewModel SavePost(PostViewModel currentPost, bool publishPost)
{
//_context.Configuration.ProxyCreationEnabled = false;
JustBlogContext currentContext = (JustBlogContext)_Context;
Post newPost = new Post();
List<Tag> postTags = new List<Tag>();
DateTime currentDateTime = DateTime.UtcNow;
bool saveSuccess = false;
if (currentPost != null) …Run Code Online (Sandbox Code Playgroud)