2010-08-12 112 views
2

我目前使用下面的代碼位的一類初始化一些單元測試:單元測試組織

[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.. 
    } 

    ... 
} 

現在,我想我現在有這個類太多的測試方法。我也相信他們涵蓋了很多理由,所以我想將它們分成更小的測試課。

我的問題是:

  1. 目前,這是初始化測試的最好方法?我知道我可以使用[TestInitialize]註釋,但是這不允許我將參數傳遞給我想要使用的字段的初始化,是嗎?

  2. 我打算在2-3個較小的測試類中拆分當前的測試類。我目前的想法是創建一個初始化邏輯所在的基類測試類,然後讓所有這些新類繼承它。我看到的唯一區別是必須將Engine,BackgroundBoardPieceBoard作爲受保護字段。這是一個好主意嗎?

  3. 您通常如何處理非常相似的單元測試,但通常至少有一個不同的設置字段?我的意思是,在我的許多單元測試中,我有相同的Engine,BackgroundBoard,PieceBoard,FallingPiece,CurrentFallingPiece,FallingPieceFactory等等,但是通常這些東西中的一個或兩個對於每個測試都是不同的。我通過在每次測試中用我需要的參數定義TestInitializer()方法來避開這個問題,但我仍然想知道是否有其他方法可以做到這一點。

感謝

回答

1

一般來說,這是最明顯的有被測試每班一個測試類(文件)。

所以,你應該有一個EngineTestBackgroundBoardTest