2012-02-02 57 views
0

我使用「微軟痣的單元測試」文件來學習在MS Pex和痣網站上找到的痣。我已經瀏覽了指南,發現了一些我無法解決的問題。這些問題阻止了我運行這些示例。 通過只複製粘貼附錄A中的代碼,我有許多錯誤。痣的例子不工作從Pex和鼴鼠的網站

  1. 在類「TestReader」的方法「的LoadFile」被調用從文件系統中的靜態方法「ReadAllText」,但這不是staticly在類定義。

  2. 在類testReaderTest中使用的類「SIFileSystem」永遠不會在任何地方定義,並且clas'SIFileSystem'中的方法'ReadAllTextString'也永遠不會被定義。該類是否需要由programemr定義或由IDE自動生成?我在指南中看到了一個不完整的例子,但是沒有明確的指示是否應該進行創建。這很混亂!

  3. 在'TestReaderTest'類中的方法'CheckValidFileWithMoles'中有一個被靜態使用的對象名爲'MFileSystem',這是什麼,它是一個錯字?它被使用兩次。

回答

1

是的,在文檔中有幾個問題。關於你列出的問題:

1.)你是對的,ReadAllText是一個實例成員。你可以只是更換行:

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

2)SIFileSystem是由痣框架生成的存根類型。如果您沒有在自己的項目中插入TestReader.csFileSystem.csIFileSystem.cs,請創建一個新項目並移動它們。在測試項目中,使用其他三個文件添加對項目的引用,然後右鍵單擊該引用並選擇「添加摩爾組件」選項。

當您構建,痣會生成stub和摩爾類,然後你可以通過添加導入類型:

using StubsTutorial.Moles; 

UnitTest1.cs

3.)MFileSystem是由鼴鼠生成的一種痣類型,當您按照上述步驟時將包括在內。 CheckValidFileWithMoles方法也存在另一個問題:

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

不起作用。如果ReadAllText方法是靜態的,這將是正確的,但由於它是實例成員,因此MFileSystem類不包含相應的靜態屬性。爲了解決這個問題,我們需要改變的是使用靜態AllInstances屬性來代替:

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

TestReader類寫入的方式,我們必須這樣痣它。我們還可以向TestReader類添加構造函數,以接受IFileSystem的實例,並將MFileSystem的實例改爲傳遞給該構造函數。

希望這可以幫助你。

+0

我同意。重要的是要注意這些文檔不是爲最近發佈的Moles和Pex編寫的。 – 2012-02-04 19:00:51