英文:
Go test not running specific test despite flag inclusion
问题
文件夹结构:
./test
├── abc
│ └── abc_test.go
└── run_test.go
run_test.go
package test
import (
. "gopkg.in/check.v1"
"testing"
)
func Test(t *testing.T) {
TestingT(t)
}
abc_test.go
package abc
import (
"fmt"
. "gopkg.in/check.v1"
)
type TestSuite struct{}
var _ = Suite(&TestSuite{})
func Test(t *testing.T) {
TestingT(t)
}
func (s *TestSuite) SetUpSuite(c *C) {
fmt.Println("start")
}
func (s *TestSuite) TestOne(c *C) {
fmt.Println("start one")
}
func (s *TestSuite) TestTwo(c *C) {
fmt.Println("start two")
}
运行所有测试:
go-playground > go test -v ./...
? go-playground [没有测试文件]
=== RUN Test
OK: 0 通过
--- PASS: Test (0.00s)
PASS
ok go-playground/test (已缓存)
=== RUN Test
start
start one
start two
OK: 2 通过
--- PASS: Test (0.00s)
PASS
ok go-playground/test/abc 0.010s
? go-playground/tree [没有测试文件]
尝试只运行一个名为TestOne
的测试,但都失败了
go-playground > go test -v -check=TestOne ./... INT 17:36:03
? go-playground [没有测试文件]
go-playground > go test -v -check=abc ./...
? go-playground [没有测试文件]
go-playground > go test -v -gocheck.f=TestOne ./...
? go-playground [没有测试文件]
go-playground > go test -v -gocheck.f TestOne ./...
? go-playground [没有测试文件]
go-playground > go test -v -gocheck.f TestSuite ./...
? go-playground [没有测试文件]
go-playground > go test -v -gocheck.f TestSuite ./...
? go-playground [没有测试文件]
go-playground > go test -v -run TestOne ./test/...
testing: 警告:没有要运行的测试
PASS
ok go-playground/test (已缓存) [没有要运行的测试]
testing: 警告:没有要运行的测试
PASS
ok go-playground/test/abc 0.004s [没有要运行的测试]
go-playground > go test -v -run TestOne ./...
? go-playground [没有测试文件]
testing: 警告:没有要运行的测试
PASS
ok go-playground/test (已缓存) [没有要运行的测试]
testing: 警告:没有要运行的测试
PASS
ok go-playground/test/abc (已缓存) [没有要运行的测试]
? go-playground/tree [没有测试文件]
似乎什么都不起作用。请指出我错过了什么?
英文:
Folder structure:
./test
├── abc
│ └── abc_test.go
└── run_test.go
run_test.go
package test
import (
. "gopkg.in/check.v1"
"testing"
)
func Test(t *testing.T) {
TestingT(t)
}
abc_test.go
package abc
import (
"fmt"
. "gopkg.in/check.v1"
)
type TestSuite struct{}
var _ = Suite(&TestSuite{})
func Test(t *testing.T) {
TestingT(t)
}
func (s *TestSuite) SetUpSuite(c *C) {
fmt.Println("start")
}
func (s *TestSuite) TestOne(c *C) {
fmt.Println("start one")
}
func (s *TestSuite) TestTwo(c *C) {
fmt.Println("start two")
}
Running all tests work:
go-playground > go test -v ./...
? go-playground [no test files]
=== RUN Test
OK: 0 passed
--- PASS: Test (0.00s)
PASS
ok go-playground/test (cached)
=== RUN Test
start
start one
start two
OK: 2 passed
--- PASS: Test (0.00s)
PASS
ok go-playground/test/abc 0.010s
? go-playground/tree [no test files]
Trying to run just the one test TestOne
all failed
go-playground > go test -v -check=TestOne ./... INT 17:36:03
? go-playground [no test files]
go-playground > go test -v -check=abc ./...
? go-playground [no test files]
go-playground > go test -v -gocheck.f=TestOne ./...
? go-playground [no test files]
go-playground > go test -v -gocheck.f TestOne ./...
? go-playground [no test files]
go-playground > go test -v -gocheck.f TestSuite ./...
? go-playground [no test files]
go-playground > go test -v -gocheck.f TestSuite ./...
? go-playground [no test files]
go-playground > go test -v -run TestOne ./test/...
testing: warning: no tests to run
PASS
ok go-playground/test (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok go-playground/test/abc 0.004s [no tests to run]
go-playground > go test -v -run TestOne ./...
? go-playground [no test files]
testing: warning: no tests to run
PASS
ok go-playground/test (cached) [no tests to run]
testing: warning: no tests to run
PASS
ok go-playground/test/abc (cached) [no tests to run]
? go-playground/tree [no test files]
Nothing seems to work. Mind pointing out what did I miss?
答案1
得分: 2
这主要是关于"gopkg.in/check.v1"的问题。作为替代,您可以cd abc
并使用go test -v -check.f=TestOne
。那样会起作用。您不应该期望go test -run TestOne
能够工作。从go命令的角度来看,这不是一个测试。它的角度只有一个测试:func Test(t *testing.T) { TestingT(t) }
。
至于是否允许使用"gopkg.in/check.v1"进行包路径和包模式匹配的组合,例如:
go test -v -gocheck.f=TestOne ./...
我不确定。我建议联系该包的作者http://labix.org/gocheck。
英文:
This is mostly a question about "gopkg.in/check.v1". As an alternative you can cd abc
and use go test -v -check.f=TestOne
. That will work. You should not expect go test -run TestOne
to work. This is a not a test from the go command's perspective. The only test from its perspective is func Test(t *testing.T) { TestingT(t) }
.
As for whether combinations of package paths and package pattern matching are allowed with "gopkg.in/check.v1", such as:
> go test -v -gocheck.f=TestOne ./...
I am not sure. I suggest contacting the authors of the package http://labix.org/gocheck .
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论