Go语言八皇后实现TDD实践报告
八皇后问题指的是在一张8*8的棋盘上摆八个皇后,使他们无法互相攻击,并求摆放的方案数;也就是说,这八个棋子相互不能同行同列同斜线。这次实验我们使用TDD的方法,循序渐进,使用go语言解决此问题。
先写测试
在同一个包eightQueen
中,先编写测试代码文件。注意测试代码文件必须以_test.go
结尾,测试函数必须以Test
开头,这种情况下编译器才会识别为测试。
// eightQueen_test.go
package eightQueen
import "testing"
func TestEightQueen(t *testing.T) {
expected := 92
tested := EightQueen()
if tested != expected {
t.Errorf("got %q want %q", tested, expected)
}
}
八皇后问题的答案是92,测试中,我们希望被测试函数的结果与答案相符,否则打印错误信息。
尝试运行测试
测试命令:go test
注意,我们需要在当前代码目录下执行此命令。
结果:.\eightQueen_test.go:20:12: undefined: EightQueen
显然,由于我们之编写了测试代码,而没有被测试函数,不可能通过测试。
先使用最少的代码来让失败的测试先跑起来
这里我们当然可以一步到位,但是为了遵守TDD的原则,我们只简单的编写少量的代码,完成:
- 被测试函数
EightQueen()
的声明和定义; - 八皇后算法的大体框架。
// eightQueen.go
package eightQueen
var visy []bool
var visa []bool
var visb []bool
var count int
func EightQueen() int {
visy = make([]bool, 8) // 列查重
visa = make([]bool, 15) // 斜线查重
visb = make([]