Moles示例不适用于Pex和Mole站点

时间:2012-02-02 20:06:38

标签: moles

我正在使用"单元测试与Microsoft moles"用于学习MS Pex和Moles网站上发现的痣的文档。我已经介绍了指南,发现了一些我无法解决的问题。这些问题使我无法运行这些示例。 通过仅仅处理和粘贴附录A中的代码,我会遇到一些错误。

  1. 在课程' TestReader'方法' LoadFile'正在调用静态方法' ReadAllText'来自FileSystem,但这并没有在类中静态定义。

  2. 课程' SIFileSystem'在类testReaderTest中使用永远不会在任何地方定义和方法' ReadAllTextString'来自clas' SIFileSystem'从来没有被定义过。此类是否需要由programemr定义,还是由IDE自动生成。我在指南中看到了一个局部的例子,但是没有关于它是否应该被创建的明确指示。这令人困惑!

  3. 在方法' CheckValidFileWithMoles'在班级' TestReaderTest'有一个静态使用的对象叫做MFileSystem'这是什么,它是一个错字?它被使用了两次。

1 个答案:

答案 0 :(得分:1)

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

1。)你是对的,ReadAllText是一个实例成员。您只需用以下内容替换该行:

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

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

构建时,Moles将生成stub和mole类,然后您可以通过添加以下内容来导入类型:

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的实例传递给该构造函数。

希望这可以帮助你。