我目前使用下面的代碼位的一類初始化一些單元測試:單元測試組織
[TestClass]
public class BoardTests_SquarePieceFalling
{
private Engine engine;
private BackgroundBoard backgroundBoard;
private PieceBoard pieceBoard;
private IFallingPieceFactory GetFallingPieceFactory(FallingPiece fallingPieceToReturn)
{
var factory = new Mock<IFallingPieceFactory>();
factory.Setup(f => f.Generate()).Returns(fallingPieceToReturn);
return factory.Object;
}
private void TestInitializer(Color pieceColor, Size boardSize) {
backgroundBoard = new BackgroundBoard(boardSize);
pieceBoard = new PieceBoard(boardSize);
var fallingPiece = new FallingPiece(new SquarePiece(), pieceColor, boardSize.Width);
var fallingPieceFactory = GetFallingPieceFactory(fallingPiece);
var currentFallingPiece = new CurrentFallingPiece(fallingPieceFactory);
var fallingPieceMovementEvaluator = new FallingPieceMovementEvaluator(backgroundBoard, currentFallingPiece, boardSize);
engine = new Engine(backgroundBoard, pieceBoard, currentFallingPiece, fallingPieceMovementEvaluator);
}
...Unit-Tests are below
[TestMethod]
public void When_Square_Hits_The_Ground_Another_One_Starts_Falling_From_The_Top()
{
TestInitializer(Color.Red, new Size(2, 7));
engine.Tick(10);
..Asserts..
}
...
}
現在,我想我現在有這個類太多的測試方法。我也相信他們涵蓋了很多理由,所以我想將它們分成更小的測試課。
我的問題是:
目前,這是初始化測試的最好方法?我知道我可以使用[TestInitialize]註釋,但是這不允許我將參數傳遞給我想要使用的字段的初始化,是嗎?
我打算在2-3個較小的測試類中拆分當前的測試類。我目前的想法是創建一個初始化邏輯所在的基類測試類,然後讓所有這些新類繼承它。我看到的唯一區別是必須將
Engine
,BackgroundBoard
和PieceBoard
作爲受保護字段。這是一個好主意嗎?您通常如何處理非常相似的單元測試,但通常至少有一個不同的設置字段?我的意思是,在我的許多單元測試中,我有相同的
Engine
,BackgroundBoard
,PieceBoard
,FallingPiece
,CurrentFallingPiece
,FallingPieceFactory
等等,但是通常這些東西中的一個或兩個對於每個測試都是不同的。我通過在每次測試中用我需要的參數定義TestInitializer()
方法來避開這個問題,但我仍然想知道是否有其他方法可以做到這一點。
感謝