2010-08-13 75 views
4

單元測試中有沒有任何一點方法,它唯一做的是委託另一個對象的工作?例如:單元測試委派方法

class abc { 

    ... 

    public void MoveLeft() 
    { 
     fallingPiece.MoveLeft(); 
    } 

    ... 
} 

我正在做一些現有類的單元測試,用於學習目的。例如,爲這個MoveLeft()方法做單元測試似乎有點奇怪。但我不確定如果我完成了Test-First,那該如何呢?

感謝

+0

爲什麼您首先使用該方法? YAGNI ... – arootbeer 2010-08-13 05:11:30

+0

我需要它。我alraedy有FallingPiece.MoveLeft()代碼運行。 – 2010-08-13 05:17:35

回答

4

如果我這樣做,你的代碼會中斷嗎?如果會,那麼你需要一個測試來捕捉它。

class abc { 
    ... 
    public void MoveLeft() 
    { 
     // fallingPiece.MoveLeft(); 
    } 
    ... 
} 

假設:abc是公共/暴露類型,而fallingPiece是依賴項。如果這成立,那麼您需要測試來測試MoveLeft行爲。如果它不是公共類型,那麼您需要對使用abc作爲協作者/依賴項的公共類型XYZ進行測試。你不直接測試它,但它仍然需要測試。

+0

嗯。我沒有想過abc的可訪問性。我會說它不會被外界公開。 FallingPiece確實是一個依賴項。 – 2010-08-13 05:19:59

+0

@devoured ...查看更新。 – Gishu 2010-08-13 05:34:07

1

我的單元測試的理解是,他們是有保證的方法內部的邏輯保持不變,當你不打算爲它改變了,這種方法沒有邏輯的。在我工作的代碼庫中,我們有很多傳遞方法。表面上,他們是「控制器」類,但在大多數情況下,他們所做的只是傳遞到數據層。

是的,你可以單元測試它們,假設你有辦法模擬fallingPiece。如果您實際上計劃將MoveLeft方法擴展爲包含邏輯,那麼這可能是一個好主意。

但是,就我上面的評論而言,將內聯方法內聯可能是一個更好的舉措,直到您實際需要圍繞左移引入邏輯爲止。

+0

嗯,我沒有通過內聯方法得到你的意思。你能更清楚一點嗎?感謝 – 2010-08-13 05:18:26

+2

通過內聯,我認爲他意味着你MoveLeft()把fallingPiece.MoveLeft()放在哪裏。這可能不是這樣的好主意,但如果你有abc.MoveLeft並且你用abc.fallingPiece.MoveLeft()替換它。 – derdo 2010-08-13 05:38:43

+1

我同意abc.fallingPiece.MoveLeft()將是不好的形式。在這一點上,我必須看到更多的代碼才能提出建設性意見。然而,看到你的迴應是關於這是一個非公開的方法,無論如何,沒有人會調用abc.fallingPiece.MoveLeft();只是abc中的其他代碼會調用fallingPiece.MoveLeft()。 – arootbeer 2010-08-13 05:44:10

0

此方法可能失敗的一種情況是,當Abc.MoveLeft被調用時,fallingPiece爲null。建立一個合法的abc並調用abc.MoveLeft的測試用例可能是個好主意。 類似於 CanMoveLeft() {abc abc = new Abc(); abc.MoveLeft(); Assert.That(abc.fallingPice已移至左側) }