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

使用Moq模拟EF DBContext时遇NUnit测试报错排查

使用Moq模拟EF DBContext进行NUnit测试时的问题

遇到的两类错误

  • OneTimeSetUp: System.ArgumentException : 无法实例化类Tracker.Models.TrackerContext.TrackerContext的代理。
  • OneTimeSetUp: Moq.MockException : ImisContext.TrackerOrderBridges = InternalDbSet调用因严格Mock行为失败。所有Mock上的调用都必须有对应的设置。

背景说明

  • TrackerContext本身无问题,在未引入iMIS Context的其他测试类中可正常使用。
  • TrackerContext采用Code First模式,结合IConfiguration创建;iMIS Context是Scaffold生成的,通过base(options)方式初始化。
  • 使用MockBehaviour.Strict时触发第二个错误,不使用则触发第一个错误。
  • 仅在测试新的Enquiry Controller时失败,其他控制器测试正常。

测试代码

public EnquiryControllerTests()
{
    _mockTrackerContext = new Mock<TrackerContext>(Mock.Of<IConfiguration>());
    _mockiMISContext = new Mock<ImisContext>(new DbContextOptions<ImisContext>());
    _mockActiveDirectoryHelper = new Mock<ActiveDirectoryHelper>(Mock.Of<IHttpContextAccessor>());
    _mockEmailHelper = new Mock<EmailHelper>();

    _enquiryController = new EnquiryController(
        _mockiMISContext.Object,
        _mockTrackerContext.Object,
        _mockActiveDirectoryHelper.Object,
        _mockEmailHelper.Object
    );
}

后续排查结果

尝试多种获取Context选项的方式后,测试其他控制器发现均正常运行,最终定位实际问题出在EmailHelper的Mock配置上。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:19:53