【问题标题】:How does "Typemock Isolator" mock static methods?“Typemock Isolator”如何模拟静态方法?
【发布时间】:2011-03-13 12:44:11
【问题描述】:

正如你们中的一些人所知,在 .net 中模拟静态方法通常是不可能的。

通过模拟,我的意思是用另一个具有相同签名的方法替换一个类中的方法,通常用于测试目的。

用于模拟方法的两个主要方法是声明它是虚拟的或在接口中定义它。这两个都不允许用于 .net 静态方法。

但是,有一个名为“Typemock Isolator”的昂贵工具可以模拟静态方法。 Isolator 如何完成这个看似不可能的壮举?

【问题讨论】:

标签: .net unit-testing mocking typemock typemock-isolator


【解决方案1】:

FAQ

基本上,Typemock fake 实例化一个原始类型的新对象,并挂钩到该对象的每个方法和属性调用,将调用重定向到 fake 并返回您指定的值。它在 .NET Framework 中使用了一些深奥的巫术(.NET Profiler API,如果您有兴趣)来做到这一点,但这都是“合法的”。从技术上讲,任何人都可以构建 Typemock 的副本,但我还没有看到。

【讨论】:

  • 它在网站上说,“Typemock Isolator 使用面向方面的技术来重定向来自真实代码的调用。这使开发人员能够定义测试场景所需的外部组件的行为。”我希望能够更多地了解这是如何发生的。我听说过 PostSharp 等面向方面的“后编译器”工具。
  • @Rising Star:抱歉,我已编辑添加更多信息。 PostSharp 实际上会修改已编译的代码。 Typemock 使用 .NET Profiler API 实际拦截方法调用当它们被调用时并将它们重定向到假的。
  • 接受:.net profiler api。它是否在他们的网页上的其他地方说他们使用 .net profiler api,或者你知道其他方式吗?
  • @Rising Star:它在FAQ 上,我在我的答案中链接了它。 Internally, it usesthe .NET framework profiler API to monitor an application's execution. When a method is called, the CLR notifies Typemock Isolator; the framework can then return mocked values and override the original code completely.
猜你喜欢
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多