Minesweeper Kata,如何管理和更改测试以反映TDD中的设计?

时间:2011-11-05 11:41:08

标签: unit-testing tdd

我正在做Minesweeper Kata http://codingdojo.org/cgi-bin/wiki.pl?KataMinesweeper

我决定从网格创建开始,并对组织增长测试基础提出一些问题。

我做的第一件事就是在MineSweeperTest类中创建测试(并实现他们需要的东西):

@Test
public void testCreateGridWithRightDimensions() {
    String[][] grid = new MineSweeper().toGrid(field);
    // ...
}

下一个

@Test
public void testFillGridWithFieldData() {
    String[][] grid = new MineSweeper().toGrid(field);
    // ...
}

然后

@Test
public void fillMultipleGrids() {
    String[][] grid = new MineSweeper().toGrid(fields);
    // ...
}

现在,由于我有工作领域进行网格翻译工作,我将稍微清理一下我的解决方案,并且几乎没有问题:

现在我使用String [] []作为网格,我想介绍Grid对象的新概念。这是否意味着我应该将这些测试从MineSweeperTest移动到GridTest并更改测试以使用Grid:

new Grid(field);

并在将来实施类似的内容:

grid.isSafeField(row, col);

网格的内部结构怎么样?我不希望我的sweeper类知道我的Grid基于字符串数组的事实。 如果是这样,我目前的测试变得无用,需要更改,但我看不到这样做的方法。

如果你能指出我正确的方向,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我同意使用Grid代替String[][]可能是正确的方法。要在Grid上执行断言,您可以将它与使用工厂构造函数或Hamcrest匹配器在测试中创建的Grids进行比较。

以下是测试的外观:

@Test
public void sweepingAMineShouldMakeItDissapear() {
   Grid unswept = Grid.grid(".*",
                            "..");
   unswept.sweep(2, 1);
   assertEquals(unswept, grid("..",
                              "..");
}

或者你可能对隐藏的地雷与露出的地雷有不同的符号。