单元测试组织

时间:2010-08-12 18:34:29

标签: c# java unit-testing

我目前正在使用以下代码来初始化类中的一些单元测试:

[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个较小的测试类中拆分当前的测试类。我目前的想法是创建一个初始化逻辑所在的基础测试类,然后使所有这些新类继承它。我看到的唯一区别是必须将EngineBackgroundBoardPieceBoard作为受保护字段。这是个好主意吗?

  3. 您如何处理非常相似的单元测试,但通常至少有一个不同的设置字段?我的意思是,在我的很多单元测试中,我有相同的EngineBackgroundBoardPieceBoardFallingPieceCurrentFallingPieceFallingPieceFactory等等,但通常每个测试中有一个或两个不同。我通过在每个测试中使用我需要的参数定义TestInitializer()方法来规避问题,但是我想知道是否还有其他方法可以做到这一点。

  4. 由于

2 个答案:

答案 0 :(得分:1)

通常,每个类测试一个测试类(文件)是最明显的。

所以你应该有一个EngineTestBackgroundBoardTest

答案 1 :(得分:1)

我没有看到你正在做什么的任何问题。您可能需要查看此内容:http://xunitpatterns.com/Parameterized%20Test.html