You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Web API用xUnit和Mock测试Put方法失败,如何调整测试代码

问题根因

你当前的单元测试仅对UpdateGroup方法做了Mock配置,控制器执行PutGroup时会先调用_groupsService.GetGroupById(id)判断分组是否存在,该方法没有做Mock配置,Moq框架对未配置的引用类型方法默认返回null,所以控制器直接走到NotFound分支,测试断言失败。

解决方案

只需在单元测试中补充GetGroupById方法的Mock配置即可,修改后的测试代码如下:

public void UpdateGroup()
{
    var group = new Group()
    {
        GroupName = "Grp",
        Capacity = 40
    };

    // 新增配置:指定id为6时GetGroupById返回非空对象,模拟分组已存在
    mock.Setup(p => p.GetGroupById(6)).Returns(new Group());
    // 原有UpdateGroup配置保留
    mock.Setup(p => p.UpdateGroup(6, group));
    
    GroupsController grp = new GroupsController(mock.Object);
    var result = grp.PutGroup(6, group);
    
    Assert.IsType<OkObjectResult>(result);
    // 可选补充:验证UpdateGroup方法被正常调用一次,提升测试严谨性
    mock.Verify(p => p.UpdateGroup(6, group), Times.Once);
}

补充说明

如果你的控制器中GroupExists方法内部依赖_groupsService的相关方法做判断,还需要根据该方法的实现逻辑补充对应的Mock配置,避免抛出DbUpdateConcurrencyException时的分支逻辑也返回错误结果。

内容的提问来源于stack exchange,提问作者Hema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:09:02