//测试函数需要以Test开头 funcTestAdd(t *testing.T) { fmt.Println("Running short test") res := add(1, 2) if res != 3 { t.Errorf("add(1,2) should be 3, got %d", res) } }
cd到测试文件的目录,执行测试命令go test:
以下是运行结果:
1 2 3 4
(base) PS F:\GolandProjects\GoProject1\main> go test Running short test PASS ok GoProject1/main 0.489s
funcTestAdd(t *testing.T) { fmt.Println("Running short test") res := add(1, 2) if res != 3 { t.Errorf("add(1,2) should be 3, got %d", res) } }
funcTestAdd2(t *testing.T) { if testing.Short() { fmt.Println("Skipping long test") //短测试模式就跳过该测试 t.Skip("Skipping long test") } fmt.Println("Running long test") res := add(5, 6) if res != 11 { t.Errorf("add(5,6) should be 11, got %d", res) } }
在运行时指执行短测试,只需要执行go test -short:
1 2 3 4 5
(base) PS F:\GolandProjects\GoProject1\main> go test -short Running short test Skipping long test PASS ok GoProject1/main 0.448s
我们发现跳过了第二个测试,也就是测试函数TestAdd2。
当然如果还是执行go test命令,则两个测试都将会运行:
1 2 3 4 5
(base) PS F:\GolandProjects\GoProject1\main> go test Running short test Running long test PASS ok GoProject1/main 0.417s
如果想要同时测试很多条数据,可以按如下的方式处理,而不需要写很多的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
funcTestAdd3(t *testing.T) { var dataset = []struct { a, b, expected int }{ {1, 2, 3}, {5, 6, 11}, {10, 20, 30}, {100, 200, 300}, } for _, d := range dataset { res := add(d.a, d.b) if res != d.expected { t.Errorf("add(%d,%d) should be %d, got %d", d.a, d.b, d.expected, res) } } }
这里我们用go test -v测试一下:
1 2 3 4 5 6 7 8 9 10 11
(base) PS F:\GolandProjects\GoProject1\main> go test -v === RUN TestAdd Running short test --- PASS: TestAdd (0.00s) === RUN TestAdd2 Running long test --- PASS: TestAdd2 (0.00s) === RUN TestAdd3 --- PASS: TestAdd3 (0.00s) PASS ok GoProject1/main 0.408s
go test 用于运行测试并显示简洁的结果,而 go test -v 用于以详细模式运行测试并提供更多的输出信息,有助于更深入地了解测试的运行情况。通常,在开发和调试过程中,使用 -v 标志是很有帮助的,但在持续集成和自动化测试中,可能更倾向于使用简洁的 go test,以便更容易解释测试结果。