2010-04-20 19 views
0

給定類像System.Timers.Timer,或任何託管類(無論用戶定義,從.net框架,或一些第三方庫)是否有一些程序可以用來(a)基於這個類生成一個接口,(b)爲給定的類生成一個包裝器?是否有一個工具,我可以用它來生成接口和包裝對象嘲笑在c#

例如,如果我有一個

public class Foo 
{ 
    public object MyProperty { get { ... } set { ... } } 
    public int SomeMethod(object a) { ... } 
} 

它會創建一個接口

interface IFoo 
{ 
    object MyProperty { get; set; } 
    int SomeMethod(object a) { ... } 
} 

,甚至包裝

class FooWrap 
{ 
    // something for relay constructor here 
    ... 

    Foo _me; 

    public object MyProperty { get { return _me.MyProperty; } set { _me.MyProperty = value; } } 
    public int SomeMethod(object a) { return _me.SomeMethod(); } 
} 

顯然有東西,我還沒有想過像事件,泛型等。我想要一個DWIMNWIS-PSICHTO(-Plus-Stuff -I-Clearly-Haven'-Thought-Of)。

我知道resharper/vs可以用來提取一個接口,但我只能用在我自己的類上。

另外:令人驚訝的是,簡單地習慣以前「不可接受」的想法最終會給它帶來合法性。一年前,不得不爲所有想要模擬和採用注入框架的對象創建接口的想法看起來像是瘋狂的高度。事實證明,雖然它不是死亡和稅收,但它是sparta。

我意識到並使用了typemock。這當然是精靈巫師的工作。有一天,800美元似乎不是我想要購買的那麼多錢。

+0

有關的? http://stackoverflow.com/questions/37359/what-c​​-mocking-framework-to-use – Charles 2010-04-20 02:49:41

+0

如果還不存在,它會成爲一個不錯的開源項目。你如何處理像'void Process(Processor p)'這樣的依賴項,包裝生成器是否應該將該方法轉換爲'void Process(IProcessor p)'?在任何情況下,Visual Studio的「Extract Interface」都可以運行得很好:) – Juliet 2010-04-20 02:50:25

+0

@Juliet - 對我來說還不夠好。我希望能夠爲例如System.Timers.Timer或我的代碼之外的其他類。 – fostandy 2010-04-20 03:18:48

回答

0

我聽到好東西rhino mock 還有nmock

很抱歉,但我沒有關於他們的更多的額外信息。在書中閱讀一些關於他們的內容。

0

我建議您創建自己的接口並僅實現您需要的接口。 Typemock類似的方法是邪惡的,應該只用於遺留代碼,直到它被重構爲止。

+0

我通常不知道我需要什麼,直到我開始使用它。你是說每次我在課堂上調用一個以前未使用過的方法,然後將該方法添加到接口中?這似乎是一個主要的痛苦。 – fostandy 2010-04-20 03:17:57

+0

我認爲這不是太糟糕,值得。而你越小,你的界面越好。否則,我不知道你是否有其他選擇,但Typemock。特別是當你想到系統庫中的靜態方法調用等時。無論如何,我不知道如何優雅地嘲弄靜態(即不是沒有輸入模式),而是包裝它們。 – ziya 2010-04-20 08:57:38