所以我对一个班级做了以下测试Board
那将会诞生:
[TestMethod]
public void Set_The_Origin_As_Violet_And_The_Query_Confirms_It() {
Board board = new Board(10, 10);
Color expected = Color.Violet;
board.SetColorAt(0, 0, expected);
Color actual = board.GetColorAt(0, 0);
Assert.AreEqual(expected, actual);
}
我尝试运行代码,但编译器发出信号Board
不存在。所以我创造了它。
我尝试再次运行代码,但没有成功,因为 SetColorAt() 和 GetColorAt() 方法都不存在。我创建了它们:
public void SetColorAt(int x, int y, Color color) {
}
public void GetColorAt(int x, int y) {
}
不过,并非一切都很好,因为我必须归还 Color.Violet。所以我将 GetColorAt() 更改为
public void GetColorAt(int x, int y) {
return Color.Violet;
}
于是我第一次获得了绿灯。
我希望我的最终代码出现在班级板上的形式如下:
public class Board
{
private Color[,] board;
public Board(int x, int y)
{
board = new Color[x, y];
}
public void SetColorAt(int x, int y, Color color) {
board[x, y] = color;
}
public Color GetColorAt(int x, int y) {
return board[x, y];
}
}
我的第一个问题是......
到那里怎么走?我可以考虑在上面所示的单元测试的“重构”阶段,当删除重复时我最终会得到这段代码吗?
如果答案是肯定的,我觉得我的单元测试正在测试一些对于代码实际功能来说过于“本地化”的东西。您会看到,测试只是检查 1 个像素和一种颜色,而代码本身则更加复杂和丰富。
也许解决方案是添加更多单元测试?你建议做哪一个?
我的第二个问题是...
我知道以后我会想要一个IBoard
。我应该在上面的单元测试中表达这一点吗?我应该让
Board board = new Board(10, 10);
照原样并仍然创造IBoard
界面?这该如何处理呢?