如何使用Microsoft Fakes框架来填充实例方法?

2023-12-24

我在 VS2012 中使用 Microsoft Fakes 框架。

我使用下面的代码来填充instance我的类型的方法。

    using (ShimsContext.Create())
    {
        ShimDateTime.NowGet = () => { return new DateTime(1949, 10, 1); };
        DateTime now = DateTime.Now;  // shim works for the static property DateTime.Now.

        Class1 dependency = new Class1();


        using (ShimsContext.Create())
        {
            ShimClass1 shim1 = new ShimClass1();
            StubClass1 stub1 = new StubClass1();
            shim1.method1 = () => { return "shim method1"; };
            shim1.IMethod1 = () => { return "shim IMethod1"; };

            String s1 = dependency.method1();// shim doesn't work for the instance method.
            String s2 = dependency.IMethod1();// shim doesn't work for the instance method.
        }

class1 看起来像这样:

public class Class1 : Interface1
{
    public String method1()
    {
        return "real method1";
    }

    //Interface 1 member
    public string IMethod1()
    {
        return "real IMethod1";
    }
}

我希望 s1 和 s2 是匀场输出,但它仍然是真实输出。

Why?


如果“method1”是静态的,那么您的垫片就会起作用。然而,使用当前的代码,您还没有真正消除“method1”。您需要将该实例与 shim 实例关联

Class1 依赖 = new ShimClass1() { Method1 = () => { return "Shim.Method1"; } };

或将所有实例方法与您的委托相关联

ShimClass1.AllInstances.Method1 = (q)=> { return "Shim.Method1"; };

另外,我认为不需要执行两次 ShimsContext.Create()

如果您想使用存根来重定向 IMethod1,您应该使用 StubInterface1

Class1 依赖 = new StubInterface1() { Method1 = () { return ""; } };

这些的变体可以在 msdn 上找到以供参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Microsoft Fakes框架来填充实例方法? 的相关文章

  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • 模拟 DBSet,EF 模型优先

    正如标题所说 我遵循模型优先方法 所以我的模型类是自动生成的 如果我想嘲笑DBContext衍生的MyModelContainer其中包含DBSets实体类 阅读一些内容 为了进行单元测试 您需要将其更改为IDBSet 是否可以做到这一点
  • AngularJS 和 PouchDB 服务的单元测试

    我正在尝试对我的个人 Angular 工厂进行单元测试 但很难尝试正确模拟和注入 PouchDB 对象 我的工厂代码目前如下 factory Track function var db new PouchDB tracks var reso
  • Maven 未运行 Spring Boot 测试

    我有一个要测试的 Spring Boot REST API 我可以在 Eclipse 中手动运行测试 无需 Maven 并通过将应用程序作为 JUnit 测试运行 它运行良好并显示结果 但是mvn test正如您将在下面发现的那样 它不起作
  • pydev 断点不起作用

    我正在使用 python 2 7 2 sqlalchemy 0 7 unittest eclipse 3 7 2 和 pydev 2 4 开发一个项目 我在 python 文件 单元测 试文件 中设置断点 但它们被完全忽略 之前 在某些时候
  • 如何避免从模拟对象列表返回模拟

    我正在尝试模拟 责任驱动的设计 在对象需要服务来检索其他对象的情况下 我似乎无法避免从模拟返回模拟 一个例子是检查上个月的账单是否已支付的对象 它需要一个检索账单列表的服务 所以我需要在测试中模拟 billRetrievalService
  • 将可区分的联合传递给 InlineData 属性

    我正在尝试对一个解析器进行单元测试 该解析器解析字符串并返回相应的抽象语法树 表示为可区分的联合 我认为使用 Xunit Extensions 属性会非常紧凑InlineData将所有测试用例堆叠在一起
  • XCode:代码覆盖率数据生成失败

    当我尝试运行单元测试时 我在 Objective C 项目中遇到了这个可怕的问题 我已经尝试了以下所有方法 根据各种 SOF 帖子 清除派生数据 删除 Library 中的所有模拟器设置 重新启动 XCode 重新启动MBP 多次重置模拟器
  • Enzyme - 测试嵌套组件是否正确呈现

    我正在尝试测试当通过简单的布尔值更新状态时 在父组件中其子组件是否正确呈现 在父组件下面 class Parent extends Component render const isReady this state const props
  • 为什么带有隐式转换运算符的自定义结构上的 Assert.AreEqual 失败?

    我创建了一个自定义结构来表示金额 它基本上是一个包装器decimal 它有一个隐式转换运算符将其转换回decimal 在我的单元测试中 我断言 Amount 等于原始十进制值 但测试失败 TestMethod public void Amo
  • 单元测试组合服务方法

    我正在为一个类编写 junit 单元测试 该类使用以下方法实现公开的接口 public Set
  • 单元测试和静态方法

    阅读并学习单元测试 试图理解以下帖子 http misko hevery com 2008 12 15 static methods are death to testability 这解释了静态函数调用的困难 我不太清楚这个问题 我一直认
  • Junit 4 测试套件和单独的测试类

    我有一个 JUnit 4 测试套件 其中包含 BeforeClass 和 AfterClass 方法 可以为以下测试类进行设置 拆卸 我需要的是自己运行测试类 但为此我需要为每个测试类提供一个设置 拆卸场景 BeforeClass 和 Af
  • 如何在Python模拟中调用模拟方法

    我想创建一个模拟方法来调用被模拟的底层方法 我正在想象类似以下的内容 但我找不到任何有关模拟对象的文档 该对象包含对被模拟对象的引用 我将其表示为 wrapped method foo below from mock import patc
  • 如何在不支持“PrivateObject”的.Net Core应用程序中对私有方法进行单元测试

    我的应用程序是一个 NET Core应用 我有一个public如下所示的方法 它有两个私有方法 public bool CallService JObject requestJsonObj out Status status bool pr
  • 如何找到可能直接或间接调用给定方法的所有单元测试? (。网)

    如何找到可能直接或间接调用给定方法的所有单元测试 当我改变方法时 我希望知道要运行的最佳测试 必须有一个工具可以做到这一点 由于我们有很多接口 所以我对所有在实现接口的类上至少有一个路径 var 植入方法时调用接口上的方法的单元测试感兴趣
  • Windows 程序如何临时更改其时区?

    我写了一个函数来返回time t与给定日期的午夜相对应的值 当给定日期没有午夜时 它返回最早可用的时间 例如 当埃及进入夏令时时 这种情况就可能发生 今年 时间更改于 4 月 29 日晚上午夜生效 因此时钟直接从 23 59 转到 01 0
  • 在 React 中使用 setTimeout() 并测试它

    我意识到我一直在使用setTimeout 在我的项目中 也许 比我应该做的更多 我进行了快速研究并浏览了 Github 上的一些开源 React 项目 并决定我应该询问一下 I use setTimeout主要是为了更改类名或添加样式以对
  • 如何查找包含nunit测试的dll文件

    我有一个包含许多 dll 的文件夹 其中之一包含 nunit 测试 标有 Test 属性的函数 我想从 C 代码运行 nunit 测试 有什么办法可以找到正确的dll吗 谢谢 您可以使用程序集加载文件 http msdn microsoft
  • Python3模拟用另一个函数替换函数

    如何使用 python 中的另一个函数来模拟一个函数 该函数也将提供一个模拟对象 我有类似以下操作的代码 def foo arg1 arg2 r bar arg1 does interesting things 我想替换的实现bar函数 让

随机推荐