英文:
Testing net/http?
问题
我对如何构建Go Web应用程序及其测试有些困惑。我已经阅读了《如何编写Go代码》1,但仍然不太明白。例如,我有一个名为"beacon"的Go项目,在根目录下有一个beacon.go文件。添加一个简单的beacon_test.go文件(从http://golang.org/pkg/net/http/httptest/#example_Server中完全复制)会导致以下错误:
$ go test
# github.com/jelder/beacon
./beacon_test.go:11: main redeclared in this block
previous declaration at ./beacon.go:216
FAIL github.com/jelder/beacon [build failed]
确实,第11行是func main()。如果我将beacon_test.go中的package main改为package hello,则会出现以下错误:
can't load package: package github.com/jelder/beacon: found packages main (beacon.go) and hello (beacon_test.go) in /Users/jacob/src/github.com/jelder/beacon
英文:
I am a little confused about how to structure a go web app and its tests. I have read the How to Write Go Code but still don't get it. For example, I have a go project called "beacon" with a beacon.go file at the root. Adding a trivial beacon_test.go file (copied verbatim from http://golang.org/pkg/net/http/httptest/#example_Server) causes this error:
$ go test
# github.com/jelder/beacon
./beacon_test.go:11: main redeclared in this block
previous declaration at ./beacon.go:216
FAIL github.com/jelder/beacon [build failed]
Sure enough, line 11 is func main(). If I instead change the package main line in my beacon_test.go to package hello, I get this error instead:
can't load package: package github.com/jelder/beacon: found packages main (beacon.go) and hello (beacon_test.go) in /Users/jacob/src/github.com/jelder/beacon
答案1
得分: 1
beacon_test.go还有一个名为main()的函数,请将其重命名为TestFirst(或者任何其他以Test开头的名称,注意大写的T很重要)。这是没有必要的。只需从您正在工作的包内部(包含*.go文件的那个包)运行go test .即可。如果需要更多帮助,请发布完整的文件。
英文:
beacon_test.go has also a function called main() rename it to TestFirst (or any other name you like as long as it starts with Test, note the uppercase T is important). There is no need for that. Just run go test . from inside the package you are working on (the one containing the *.go files). Post the full files if you need more help.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论