My structure is the following:
- In my
db.go
, I initialize my database
package database
type Database struct {
Dbpool *pgxpool.Pool
}
var Db Database
func InitDb() {
dbpool, err := pgxpool.New(...)
if err != nil {...} // Check for creating connection
Db = Database{Dbpool: dbpool}
greeting, err := Db.GetHelloWorld()
if err != nil {...} // Check for entering db
}
- In my
queries.go
, I create my handlers like my GetHelloWorldhandler for testing purposes
package database
func (db *Database) GetHelloWorld() (string, error) {
var greeting string
err := db.Dbpool.QueryRow(context.Background(), "select 'Hello, world!'").Scan(&greeting)
if err != nil {...} // Check for error in selecting Hello World
return greeting, err
}
- So far everything works as expected. Now in my
queries_test.go
, I like to test my handlers via dockertest in a separate database.
package database
var TestDB Database
var dbpool *pgxpool.Pool
func TestMain(m *testing.M) {
// set up docker container, database and its connection
dbpool, err = pgxpool.New(...)
// once everything is set up I want to initialize the database like in db.go
TestDB = Database{Dbpool: dbpool}
}
func Test_GetHelloWorld(t *testing.T) {
var greeting string
greeting, err := TestDB.GetHelloWorld()
}
Everything works in my queries_test.go
if I use the dbpool.QueryRow(context.Background(), "select 'Hello, world!'").Scan(&greeting)
command in my test as it is written down in my handlers but this is not really the sense of testing handlers...
If I run go test ./queries_test.go
like shown above, I have no compile error but inside my testing container I get the error undefined: Database
. If I try importing TestDB from db.go like
import app/database
var TestDB database.Database
I receive the import cycle not allowed in test
, which I completely understand is not the way of doing it.
So far I assume a third and maybe forth file with an interface might do the job like suggested here but does it really have to be that complicated?
I feel like there should be a simpler way...
Maybe anyone can help me out?