2012-03-20 80 views
3

我在c中有下面的代碼,但不能解決如何測試它;我需要測試aMethodUnderTest。我無法像在庫中那樣更改ABaseClass。但是如果我要測試AClass,我需要能夠設置Thing返回的內容。有沒有人有任何想法,或經驗與這種類型的代碼測試?測試一個繼承的C#類

public ABaseClass 
{ 
    protected ThingBaseClass theThing {get;} 
    public virtual .... 
    ... 
} 


public AClassUnderTest : ABaseClass 
{ 
    public MyThing Thing 
    { 
    get 
    { 
     return (MyThing)base.theThing; 
    } 
    } 

    public void aMethedUnderTest() 
    { 
    Thing.doSomething(); 
    } 
} 

注意:Thing的初始值爲空。 Thing沒有公共二傳手。

+0

你爲什麼不能檢查Thnig值設置theThing?這只是AClass的一個屬性。 – Tigran 2012-03-20 11:34:28

+0

我可以檢查Thing,但不能設置它的值。 – 2012-07-02 16:39:18

回答

1

我想你可以創建模擬繼承ABaseClass,然後檢查是否AClass.Thing返回相同的結果ABaseClassMock.theThing

+0

我認爲Thing是不可測試的,但使用Thing的其他方法可以使用嘲諷進行測試。或者只是使用多項式繼承和重寫Thing。 – 2012-03-21 10:40:13

0

您可以創建一個ABaseClass模擬和仍然使用MOQ(即使它有沒有setter)

var mock = new Mock<ABaseClass>(); 
mock.SetupGet(x => x.theThing).Returns(\*Whatever you need*\); 
+0

在這個答案的代碼中是否有錯誤,因爲它看起來像是說類返回一些東西? – 2012-03-21 10:30:00

+0

是的,我更新了我的錯字。應該說這個屬性在被調用時會返回一些東西 – 2012-03-21 20:13:56