Testing problem (programming.dev)
submitted 2 weeks ago* (last edited 2 weeks ago) by to c/golang@lemmy.ml
 

I have a todo CLI app with the following structure

tree .
.
|-- cmd
|   `-- todo
|       |-- main.go
|       `-- main_test.go
|-- go.mod
|-- todo.go
|-- todo.json
`-- todo_test.go

In the main.go, I have a function called expand, it expand range string like in the cut command When I call the expand function from main_test.go, I get the following error

cmd/todo/main_test.go:141:12: undefined: expand
FAIL  PACKAGE_URI/todo/cmd/todo [build failed]
FAIL

I tried to change the function visibility, but this doesn't help either. I replicated the dir structure on a dummy project, and it did work!!

codeberg.org repo

edit: Add repo uri

you are viewing a single comment's thread
view the rest of the comments
[–] [S] 1 point 2 weeks ago* (1 child)

same error

# URI/cmd/todo_test [codeberg.org/e55am/todo/cmd/todo.test]
cmd/todo/main_test.go:141:12: undefined: expand
ok      URI/todo 0.002s
FAIL    URI/todo/cmd/todo [build failed]
FAIL
  • source
  • parent
  • hideshow 2 child comments
  • [–] 1 point 2 weeks ago (1 child)

    this might have some answers https://go-cloud-native.com/golang/test-the-main-function-in-go, hard to verify without a repo, also recommend you post the commands you run when seeking help.

  • source
  • parent
  • hideshow 2 child comments
  • [–] [S] 1 point 2 weeks ago (1 child)

    thanks for your help, this is the repo on dev brach

  • source
  • parent
  • hideshow 2 child comments
  • [–] 2 points 2 weeks ago* (1 child)

    Your specific question is answered here: https://www.sobyte.net/post/2023-04/go-test-path-main/.

    Well, here’s the problem! This _testmain.go is the main package of the test executable generated by go test, and it now imports a “main” package, which is not allowed in Go.

    Generally this is easily solved by moving the code you are testing to a package for example pkg/todo.go and pkg/todo_test.go or utility or whatever.

    Finally if you look at that link i sent they recommend not testing main in exactly the way you are testing it. One negative of the way you are testing it is you aren't really unit testing -- every time you run main_test you compile main, this is a little unusual.

  • source
  • parent
  • hideshow 2 child comments