2013-08-30 45 views
3

我有這樣的事情:如何使用Rhino Mocks模擬受保護的計算只讀屬性?

public class SomeClass 
{ 
    protected ISomeInterface SomeProperty 
    { 
     get { return SomeStaticClass.GetSomeInterfaceImpl(); } 
    } 

    public void SomeMethod() 
    { 
     // uses SomeProperty in calculations 
    } 
} 

如何測試的someMethod,嘲諷使用犀牛製品SomeProperty?我正考慮獲取訪問者,使用IL重寫訪問者,只是返回模擬代理。聽起來有多瘋狂?

+2

我建議重構你的代碼,以便將'ISomeInterface'注入到'SomeClass'中。現在,你的'SomeStaticClass'形式具有很強的依賴性,這很難有效地模擬。 –

+1

爲什麼財產首先受到保護? –

+0

不幸的是,這是一個不能改變的DLL的一部分(商業原因)。 –

回答

0

你不能模擬被測試的類,但只能依賴。因此,如果您使用某種工廠而不是SomeStaticClas並使用SomeClass的構造函數參數注入它,則可以模擬工廠類。

public class SomeClass 
{ 
    public SomeClass(ISomeInterfaceFactory factory) 
    { 
     this.factory = factory; 
    } 

    protected ISomeInterface SomeProperty 
    { 
     get { return factory.GetSomeInterface(); } 
    } 

    public void SomeMethod() 
    { 
     // uses SomeProperty in calculations 
    } 
} 

public interface ISomeInterfaceFactory 
{ 
    ISomeInterface GetSomeInterface(); 
} 
相關問題