15

我想知道 Microsoft fake 框架中提供的 shim 功能是否有任何替代库,因为它仅在最终版本中受支持?

4

4 回答 4

6

据我所知,有三个框架可以让你模拟非虚拟方法和像 Fakes' Shims 这样的密封类。有

它们都是商业化的,因为它们使用 Profiling API,它非常繁琐且文档记录不充分,因此对它们进行编码真的很痛苦。

为了记录,我完全赞成假货。人们正在处理的大多数代码都是遗留代码。实用程序员的重构规则之一是确保在任何重构之前都有单元测试覆盖率以避免回归。这使得 Fakes 和类似的框架非常有用,尤其是当遗留代码不是为了测试能力而编写时。

于 2015-02-10T17:41:29.487 回答
5

Prig 尚未更新以与 VS 2017 一起使用,但Pose确实如此,并且非常适合我需要它的用途(基本的 shiming 和类似的Environment.UserNameDateTime.Now,并且具有非常好的界面:

// Create shims. They only apply within this isolate block.
var dateTimeShim = Shim.Replace(() => DateTime.Now)
                       .With(() => new DateTime(2010, 1, 1));

var usernameShim = Shim.Replace(() => Environment.UserName)
                       .With(() => "john.wick");

// Shims are only active within an Isolate block - and you 
// have to pass all shims you want to be active.
PoseContext.Isolate(() =>
{
    // Run your test - shims are active at this point.
    RunTest();
}, dateTimeShim, usernameShim);

编辑

我应该注意到,在进行相当基本的测试时会遇到很多错误——非常可怕的错误,例如“公共语言运行时检测到无效程序。”和“JIT 编译器遇到内部限制”。所以告诫购买者。

于 2018-03-25T22:12:28.850 回答
0

一个开源替代方案是Prig。获得 MIT 许可且仍处于活动状态 - 但与 VS IDE 相比略有落后

于 2018-02-06T10:36:33.337 回答
-2

是的,详细比较请看这里:

模拟框架与 MS Fakes 框架

正如您将从 Jim Cooper 的回答中了解到的那样,假程序集实际上是一件坏事,并且有更好的选择,例如支持重构并且需要更少的代码(使用泛型)。

于 2014-05-01T12:09:27.053 回答