gpt4 book ai didi

c# - 如何在 Moq 中使用 lambda 语法设置现有模拟?

转载 作者:行者123 更新时间:2023-11-30 17:48:32 25 4
gpt4 key购买 nike

Moq 中有一个新语法这让我可以使用

从头开始​​创建模拟
var newMock = Mock.Of<IInterface>(m => m.GetSomeValue() == value);

有时我不会自己创建模拟(例如,当使用 AutoData Theories 时)。然后我必须使用旧语法设置模拟

existingMock.Setup(m => m.GetSomeValue()).Returns(value);

我不喜欢这个有两个原因

  1. 可读性较差(恕我直言)
  2. 它迫使我混合使用新旧语法。

我更愿意使用类似的东西来设置现有的模拟

existingMock.SetupUsingNewSyntax(m => m.GetSomeValue() == value);
  • 这可能吗?
  • 如果没有,是否在路线图上?
    我假设也会为现有模拟引入新语法。
  • 如果不是,我该如何自己实现?

我已经知道如何使用 Mock.Get<>()Mock.Of<>() ,以及模拟对象和模拟对象之间的关系。

Moq also is the first and only framework so far to provide Linq to Mocks, so that the same behavior above can be achieved much more succintly

因为现在有两种方法可以创建和设置新模拟,旧方法和新简洁方法,我希望它能继续下去,还包括设置现有 模拟。

最佳答案

我已将解决方案代码上传到my Gist .简而言之,要点代码刚刚删除了从原始代码创建模拟实例的逻辑。为此,我需要访问 MockQueryable<T>类是内部类,所以我使用了 .NET 反射。

要避免反射代码,可以复制MockQueryable<T>的代码从 Moq 源代码到您的测试代码,以及与 MockQueryable<T> 相关的一些内部类型如果需要的话。

关于c# - 如何在 Moq 中使用 lambda 语法设置现有模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22882004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com