2013-01-01 21 views
0

這兩行代碼給了我標題中提到的錯誤。我試圖定義一個存根TestClass無法分配給<method name>,因爲它是一個方法組:Error(使用Moles框架)

var stubTestClass = new StubsTutorial.Moles.STestClass(); 
stubTestClass.WriteStuff =() => "Moled in static class!"; 

而且這是怎樣的功能WriteStuff()被定義

public class TestClass { 
    public string WriteStuff() { 
    return "Stuff written in main class."; 
    } 
} 

我不知道我要去的地方錯了。方向會幫助我。

回答

0

a tutorial我發現:

每摩爾類型由預先計算的「M」到它的名字 和放置命名它變成了一個.Moles命名空間。

因此,也許你的線

var stubTestClass = new StubsTutorial.Moles.STestClass(); 

應改爲

var moleTestClass = new StubsTutorial.Moles.MTestClass(); 

,儘管我曾與微軟痣沒有經驗。

+0

是的。生成的存根是一個部分存根,因此非虛擬成員不能在那裏實例化。選項是使用痣。謝謝。 – TheSilverBullet

+0

@TheSilverBullet重要的是要注意的是,如果'WriteStuff'仍然只是你考慮的痣類中的方法,或者如果它已經轉化爲委託類型,即在物業類型'Func鍵'的屬性這種情況(表示帶有零參數和返回類型'string'的方法)。我認爲'STestClass'(「存根」版本)的工作方式是將委託放在一個專門命名的字段中(可能用'WriteStuff'來調用)。 「WriteStuff」方法仍然是一種方法,這意味着您可以將STestClass的存根傳遞給您正在測試的方法。 –

0

我不是一個痣用戶,但...

「默認情況下,存根所有接口和抽象類產生的,雖然你也可以配置摩爾生成暴露虛擬非抽象類存根方法」

所以

a)你正確 b上配置)我注意到方法沒有標記虛擬如果)被正確

public virtual string WriteStuff() { ... } 

因爲封閉類是混凝土(未標記爲抽象或接口)

+0

這與痣框架有關。 STestClass是爲TestClass定義的存根。請注意標籤。 – TheSilverBullet

+0

你能定義哪條線準確給你錯誤嗎?它不是兩個就是一個或另一個。我認爲這是第二個... –

+0

並參見與創建測試類時使用的命名約定有關的其他答案 –

0

存根通過覆蓋它們來創建它們的公共抽象和虛擬方法的假代表。如果該方法未標記爲虛擬或抽象,則任何嘗試爲存根代理分配值都將被編譯器取代,因爲該方法未被覆蓋以返回已分配的委託。通過兩種方法來對測試類進行測試,一種簡單的公開和其他公共虛擬。爲了測試沒有界面契約或抽象或虛擬方法的公共類,必須使用墊片,而不是樁。

相關問題