如何用接口解决隐藏的依赖关系

时间:2016-10-13 19:39:39

标签: .net unit-testing interface

我有一个代码,其中棋盘和棋子注入接口。 DiagonalDirections是枚举。到现在为止还挺好。我没有注入依赖项,也没有使用隐藏的依赖项。

WriteConsoleW

问题在于这行代码:

private void addToAllowedPositions(IChessboard chessboard, IPiece piece, DiagonalDirections direction)
    {
        int horizontalIndex = piece.Position.IndexHorizontal;
        int verticalIndex = piece.Position.IndexVertical;
        while (AreIndexesValid(setHorizontalIndexDirection(direction, ref horizontalIndex), setVerticalIndexDirection(direction, ref verticalIndex)))
        {
            IPosition currentPosition = new Position(horizontalIndex, verticalIndex);
            IPiece currentPiece = chessboard.GetPiece(currentPosition);
            if (currentPiece == null)
                 {
                     allowedPositions.Add(currentPosition);
                 }
            else if (currentPiece.Color != piece.Color)
                 {
                     allowedPositions.Add(currentPosition);
                     break;
                 }
                 else break;
         }
    }

我真的不知道怎样才能在这里使用界面?每次都必须创建新职位。这是我唯一的依赖,我不知道如何隔离。当我想对这段代码进行单元测试时,我也遇到了问题。如果在Position类中有任何更改,则在现有单元测试中,此方法也会立即反映出来。

1 个答案:

答案 0 :(得分:2)

您可以将工厂方法添加到IChessboard界面:

IPosition currentPosition = chessboard.CreatePosition(horizontalIndex, verticalIndex);