Is it fine to have logging in golang test? Or is it a practice to not have logging in test?
My test currently looks something like this. I am not sure if I am doing it right and is need of advise for the best practice to do test in golang. This is an integration test btw.
var testDB *DB
func clearTable(name string) {
var err error
_, err = testDB.Exec(fmt.Sprintf("DELETE FROM %s", name))
if err != nil {
log.Fatalf("[FATA] Failed to clear a table in database. name=%q err=%q", name, err)
}
_, err = testDB.Exec(fmt.Sprintf("ALTER SEQUENCE %s_id_seq RESTART WITH 1", name))
if err != nil {
log.Fatalf("[FATA] Failed to reset ID sequence of a table in database. name=%q err=%q", name, err)
}
}
func TestMain(m *testing.M) {
var err error
testDB, err = NewDB(fmt.Sprintf("dbname=%s sslmode=disable", testDBName))
if err != nil {
log.Fatalf("[FATA] Failed to initialize test database. dbName=%q err=%q", testDBName, err)
}
defer testDB.Close()
code := m.Run()
clearTable("worker")
os.Exit(code)
}
func TestCreateWorker(t *testing.T) {
clearTable("worker")
createdWorkers := make(map[int]*Worker, 10)
for i := 0; i < 10; i++ {
username := strings.Join([]string{"worker", strconv.Itoa(i)}, "")
email := strings.Join([]string{username, "@gmail.com"}, "")
passwordHash := strings.Join([]string{username, "PasswordHash"}, "")
worker := Worker {
Username: username,
Email: email,
PasswordHash: passwordHash,
}
err := testDB.CreateWorker(&worker)
if err != nil {
t.Errorf("[ERRO] Failed to create a new worker in database. username=%q email=%q passwordHash=%q err=%q", username, email, passwordHash, err)
}
createdWorkers[i+1] = &worker
}
rows, err := testDB.Query("SELECT * FROM worker")
if err != nil {
t.Errorf("[ERRO] Failed to get all workers from database. err=%q", err)
}
defer rows.Close()
for rows.Next() {
returnedWorker := new(Worker)
err := rows.Scan(&returnedWorker.ID, &returnedWorker.Username, &returnedWorker.Email, &returnedWorker.PasswordHash, &returnedWorker.CreatedAt)
if err != nil {
t.Errorf("[ERRO] Failed to scan returned row into worker struct. err=%q", err)
}
createdWorker := createdWorkers[returnedWorker.ID]
if !reflect.DeepEqual(&createdWorker, &returnedWorker) {
t.Errorf("[ERRO] Worker created in database and worker returned from database are different. createdWorker=%v returnedWorker=%v", createdWorker, returnedWorker)
}
}
}
Aucun commentaire:
Enregistrer un commentaire