【问题标题】:Moles example not working from Pex and Mole siteMoles 示例在 Pex 和 Mole 网站上不起作用
【发布时间】:2012-02-02 20:06:38
【问题描述】:

我正在使用“使用 Microsoft moles 进行单元测试”文档来了解 MS Pex 和 Moles 网站上的 moles。我浏览了该指南,发现了许多我无法解决的问题。这些问题使我无法运行示例。 只是复制和粘贴附录 A 中的代码,我有很多错误。

  1. 在“TestReader”类中,“LoadFile”方法从 FileSystem 调用静态方法“ReadAllText”,但这不是在类中静态定义的。

  2. 类 testReaderTest 中使用的类 'SIFileSystem' 从未在任何地方定义,并且从未定义类 'SIFileSystem' 中的方法 'ReadAllTextString'。这个类需要由programemr定义还是由IDE自动生成。我在指南中看到了一个部分示例,但没有关于是否应该创建它的真正明确的指示。这令人困惑!

  3. 在“TestReaderTest”类的“CheckValidFileWithMoles”方法中,有一个静态使用的对象,名为“MFileSystem”,这是什么,是错字吗?它被使用了两次。

【问题讨论】:

    标签: moles


    【解决方案1】:

    是的,文档中有几个问题。关于您列出的问题:

    1.) 你是对的,ReadAllText 是一个实例成员。您可以将这一行替换为:

    var content = new FileSystem().ReadAllText(fileName);
    

    2.) SIFileSystem 是 Moles 框架生成的存根类型。如果您没有将TestReader.csFileSystem.csIFileSystem.cs 放在他们自己的项目中,请创建一个新的并移动它们。在测试项目中,使用其他三个文件添加对项目的引用,然后右键单击该引用并选择“添加 Moles 组件”选项。

    当你构建时,Moles 会生成存根和痣类,然后你可以通过添加来导入类型:

    using StubsTutorial.Moles;
    

    UnitTest1.cs

    3.) MFileSystem 是由 Moles 生成的一种鼹鼠类型,当您按照上述步骤操作时将包含在内。 CheckValidFileWithMoles 方法还有另一个问题:

    MFileSystem.ReadAllTextString = delegate(string f) { /* body omitted */ };
    

    不起作用。如果ReadAllText 方法是静态的,这是正确的,但由于它是实例成员,MFileSystem 类不包含相应的静态属性。要修复它,我们需要将其更改为使用静态 AllInstances 属性:

    MFileSystem.AllInstances.ReadAllTextString = (@this, f) => { /* body omitted */ };
    

    TestReader 类的编写方式我们必须这样修改。我们还可以向TestReader 类添加一个构造函数来接受IFileSystem 的实例,并将MFileSystem 的实例传递给该构造函数。

    希望这对您有所帮助。

    【讨论】:

    • 我同意。请务必注意,该文档并非针对 Moles 和 Pex 的最新版本编写。
    猜你喜欢
    • 1970-01-01
    • 2012-01-14
    • 2012-11-12
    • 2011-09-10
    • 2022-10-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多