小编Bri*_*ski的帖子

Mock DbContext SaveChanges() 方法不返回任何值

我想知道是否有人知道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)

c# unit-testing moq entity-framework-6

4
推荐指数
1
解决办法
4381
查看次数

标签 统计

c# ×1

entity-framework-6 ×1

moq ×1

unit-testing ×1