2011-04-21 76 views
3

假設我有以下我想單元測試:嘲笑兄弟方法

class Foo: IAMethods, IBMethods 
{ 
    // Implementation of IAMethods.A() 
    public int A() 
    { 
     return B() + 1; 
    } 
    // Implementation of IBMethods.B() 
    public int B() 
    { 
     return 1; 
    } 
} 

如何可以模擬B()調用時A()?我假設這個班的設計可能不正確。我有一種情況,我們有一個有很多接口的服務層,有時一個服務層功能會調用另一個(使用相同或不同的接口)。我不確定如何嘲笑其他服務層方法,因爲您無法真正依賴注入自身。任何人都可以請給我一些這種情況和建議的澄清?

回答

2

有起訂量來看看at partial mocks(RhinoMocks有類似的東西)。至少你必須讓它虛擬。

public virtual int B() 
{ 
    return 1; 
} 

在您的測試...

Mock<Foo> mock = Mock<Foo>(); 
mock.Setup(m => m.B()).Returns(5); 
int result = mock.Object.A(4); 

Assert.That(result, Is.EqualTo(9)); 

C#不允許混入但你可以有由不同的類實現的每個接口則頂級服務類可以通過組成委託調用它們。

+0

非常感謝您的支持。部分嘲諷鏈接很好地解釋了事情 - 我預計這會對很多人有用。 – Jason 2011-04-21 05:05:55

0

您可以創建Visual Studio項目模板來幫助您嘲笑。請參閱Creating Item Templates

問候, 約翰

+0

約翰,這似乎並沒有解決我的問題。除了Visual Studio模板之外,這更多的是關於模擬,界面和優秀設計的一般問題。不管怎麼說,還是要謝謝你。 – Jason 2011-04-21 04:10:25