英文:
Why am I getting "no tests to run" despite having a test function?
问题
Go新手在这里,我编写了一个简单的main_test.go文件来运行一些main.go的测试用例,当我运行go test
时,它显示testing: warning: no tests to run
PASS
ok Solution 0.878s
我的main.go:
package main
func normalizePhoneNum(phoneNumber string) string {
return ""
}
func main() {
}
main_test.go:
package main
import (
"testing"
)
func testNormalizePhoneNum(t *testing.T) {
testCase := []struct {
input string
output string
}{
{"1234567890", "1234567890"},
{"123 456 7891", "123 456 7891"},
{"(123) 456 7892", "(123) 456 7892"},
{"(123) 456-7893", "(123) 456-7893"},
{"123-456-7894", "123-456-7894"},
{"123-456-7890", "123-456-7890"},
{"1234567892", "1234567892"},
{"(123)456-7892", "(123)456-7892"},
}
for _, tc := range testCase {
t.Run(tc.input, func(t *testing.T) {
actual := normalizePhoneNum(tc.input)
if actual != tc.output {
t.Errorf("for %s: got %s, expected %s", tc.input, actual, tc.output)
}
})
}
}
有人能告诉我为什么它不运行测试用例吗?
英文:
Go newbie here, I have written a simple main_test.go file to run some test cases for main.go, when I run go test
it says testing: warning: no tests to run
PASS
ok Solution 0.878s
my main.go:
package main
func normalizePhoneNum(phoneNumber string) string {
return ""
}
func main() {
}
main_test.go:
package main
import (
"testing"
)
func testNormalizePhoneNum(t *testing.T) {
testCase := []struct {
input string
output string
}{
{"1234567890", "1234567890"},
{"123 456 7891", "123 456 7891"},
{"(123) 456 7892", "(123) 456 7892"},
{"(123) 456-7893", "(123) 456-7893"},
{"123-456-7894", "123-456-7894"},
{"123-456-7890", "123-456-7890"},
{"1234567892", "1234567892"},
{"(123)456-7892", "(123)456-7892"},
}
for _, tc := range testCase {
t.Run(tc.input, func(t *testing.T) {
actual := normalizePhoneNum(tc.input)
if actual != tc.output {
t.Errorf("for %s: got %s, expected %s", tc.input, actual, tc.output)
}
})
}
}
Can anyone please tell, why it's not running the test cases?
答案1
得分: 28
基础!请参阅go test命令的文档:
测试函数的命名规则是
TestXxx
(其中Xxx
不以小写字母开头),并且应该具有以下签名:
func TestXxx(t *testing.T) { ... }
请注意,第一个字母必须是大写的T
。您必须遵守此命名约定以便测试工具能够正确识别它们。
将您的测试函数重命名为TestNormalizePhoneNum
,然后尝试再次运行go test
。
或者,虽然这很可能不是您想要的,但您可以通过在-run
标志中指定其名称(或更一般地,指定与其名称匹配的正则表达式)来强制测试工具运行一个不符合命名约定的“测试函数”:
go test -run=testNormalizePhoneNum
英文:
Elementary! See the documentation for the go test
command:
> A test function is one named TestXxx
(where Xxx
does not start with a lower case letter) and should have the signature,
>
> func TestXxx(t *testing.T) { ... }
Note that the first letter must be an uppercase T
. You must respect this naming convention for test functions or the testing tool will simply ignore them.
Rename your test function to TestNormalizePhoneNum
and try running go test
again.
Alternatively—and although that is most likely not what you want here—you can force the testing tool to run a "test function" that doesn't adhere to the naming convention by specifying its name (or, more generally, a regular expression that its name matches) in the -run
flag:
go test -run=testNormalizePhoneNum
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论