【问题标题】:Moq setup params linq includes起订量设置参数 linq 包括
【发布时间】:2016-07-12 14:50:30
【问题描述】:

当我添加更多包含时,我破坏了很多单元测试,因为我没有在 EF 中使用延迟加载。在我的 Mock 设置线之前:

  mockDocRepo.Setup(
            x => x.GetBy(It.IsAny<Expression<Func<Doctor, bool>>>(), It.IsAny<Expression<Func<Doctor, object>>>()))
            .Returns(stubDoctor);

这对于单个包含效果很好,但是在调用 GetBy 时添加另一个包含会破坏我的所有测试。例如:

 var doctor = _dbContextScope.Repository<Doctor>().GetBy(x => x.Id == DoctorId, y => y.Contracts, y => y.Leave.Select(x => x.Type));

我尝试更改我的起订量设置以接受数组,例如 It.IsAny&lt;Expression&lt;Func&lt;Doctor, object&gt;&gt;[]&gt;(),但这似乎不起作用。我也尝试在设置中添加第二个包含 例如

mockDocRepo.Setup(
            x => x.GetBy(It.IsAny<Expression<Func<Doctor, bool>>>(), It.IsAny<Expression<Func<Doctor, object>>>(),It.IsAny<Expression<Func<Doctor, object>>>()))
            .Returns(stubDoctor);

似乎是最终包含中的.Select(x =&gt; x.Type) 打破了一切。

任何关于如何解决这个问题的想法都会很棒。

【问题讨论】:

    标签: entity-framework linq unit-testing mocking moq


    【解决方案1】:

    我认为不能进行最小起订量设置 Linq Enumerable.Select 方法。它是 Enumerable 类的静态方法。

    使用 Moq,您不能模拟/设置静态方法,.为了设置它必须是虚拟方法。

    或者尝试抽象 DbContext 并将 .select 包装在虚拟方法中。然后你应该可以进行设置了。

    【讨论】:

      猜你喜欢
      • 2012-08-26
      • 1970-01-01
      • 2010-11-30
      • 2016-12-11
      • 2019-08-19
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多