我目前正在使用以下代码来初始化类中的一些单元测试:
[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()
方法来规避问题,但是我想知道是否还有其他方法可以做到这一点。
由于
答案 0 :(得分:1)
通常,每个类测试一个测试类(文件)是最明显的。
所以你应该有一个EngineTest
,BackgroundBoardTest
等
答案 1 :(得分:1)
我没有看到你正在做什么的任何问题。您可能需要查看此内容:http://xunitpatterns.com/Parameterized%20Test.html