我使用Rhino Mocks嘗試驗證當我調用某個方法時,該方法反過來將正確地分組項目,然後調用另一種方法。檢查參數是否正確使用的最佳測試模式是什麼?
事情是這樣的:
//Arrange
var bucketsOfFun = new BucketGame();
var balls = new List<IBall>
{
new Ball { Color = Color.Red },
new Ball { Color = Color.Blue },
new Ball { Color = Color.Yellow },
new Ball { Color = Color.Orange },
new Ball { Color = Color.Orange }
};
//Act
bucketsOfFun.HaveFunWithBucketsAndBalls(balls);
//Assert ???
這裏就是麻煩的開始我。我的方法是做這樣的事情:
public void HaveFunWithBucketsAndBalls(IList<IBall> balls)
{
//group all the balls together according to color
var blueBalls = GetBlueBalls(balls);
var redBalls = GetRedBalls(balls);
// you get the idea
HaveFunWithABucketOfBalls(blueBalls);
HaveFunWithABucketOfBalls(redBalls);
// etc etc with all the different colors
}
public void HaveFunWithABucketOfBalls(IList<IBall> colorSpecificBalls)
{
//doing some stuff here that i don't care about
//for the test i'm writing right now
}
我想斷言的是,每次我打電話說我有一組1個紅球,那麼1個藍色球調用它HaveFunWithABucketOfBalls,然後1個黃球,然後2個橙色的球。
如果我可以斷言該行爲,那麼我可以驗證該方法正在做我想做的事情,即正確地分組這些球。
任何想法是什麼樣的最好的測試模式?
只是爲了方便,爲什麼你測試你的方法調用另一種方法?據推測,你應該只是測試你的對象的公共方法,並斷言你得到正確的輸出,你不應該測試實際的內部實現。 – Juliet 2010-04-12 23:15:18
@Juliet這是一個很好的觀點,答案是因爲這兩種方法都是公開的。在我的實際實現中,它們都可以獨立使用。所以兩者之間唯一真正的區別是對象如何從我在這裏描述的方法組織起來,這就是爲什麼我想測試這個功能。 – Joseph 2010-04-13 17:16:51