2012-08-22 37 views
2

我有僞造我的類問題:已overrided C#FakeItEasy假方法

A類有一個方法:

protected virtual int method(int argument) 
{ 
    implementation 
    return int; 
} 

B類延伸類A和覆蓋方法:

protected override int method(int argument) 
{ 
     int result = base.method(argument); 
     implementation 
     return result + 1; 
} 

我需要模擬B類並測試method函數。問題是我需要避免調用base.method(argument)函數。我只需要測試我的方法實現,並嘲笑該函數返回一個int。

我該怎麼用FakeItEasy做到這一點?或其他嘲諷框架?

UPDATE

問題所解決:
製作功能:

int MethodCaller(int argument) 
{ 
    base.method(argument); 
} 

,在我的B類執行它的 「方法」 功能。比嘲諷MethodCaller功能

+0

也許在這裏更好地使用indsulation inintence。 – user854301

+0

問題是「方法」函數被A類接口中的另一個公共函數調用,所以我不能改變它的簽名 – Tomasz

回答

0

你可以用的輔助類+多了一個助手方法做,但我真的不喜歡這樣的解決方案:

public class A 
{ 
    protected virtual int method(int argument) 
    { 
     return argument; 
    } 

    public int result(int argument) 
    { 
     return method(argument); 
    } 
} 

public class B : A 
{ 
    protected override int method(int argument) 
    { 
     return baseMetod(0) + 1; 
    } 

    protected virtual int baseMetod(int argument) 
    { 
     return base.method(argument); 
    } 
} 

public class C : B 
{ 
    protected override int baseMetod(int argument) 
    { 
     return 5; 
    } 
} 

所以測試可以調用new C().Result(10)