td
package,
via its Cmp*
functions, handles the tests
and all the error message boiler plate. Let’s do it:
import (
"testing"
"time"
"github.com/maxatome/go-testdeep/td"
)
func TestCreateRecord(t *testing.T) {
before := time.Now().Truncate(time.Second)
record, err := CreateRecord("Bob", 23)
if td.CmpNoError(t, err) {
td.Cmp(t, record.Id, td.NotZero(), "Id initialized")
td.Cmp(t, record.Name, "Bob")
td.Cmp(t, record.Age, 23)
td.Cmp(t, record.CreatedAt, td.Between(before, time.Now()))
}
}
Test it in playground: https://play.golang.org/p/bfe-aj_gx8Q
As we cannot guess the Id
field value before its creation, we use the
NotZero
operator to check it is
set by CreateRecord()
call. The same is true for the creation date
field CreatedAt
. Thanks to the Between
operator we can check it is set with a value included between
the date before CreateRecord()
call and the date just after.
Note that if Id
and CreateAt
could be known in advance, we could
simply do:
import (
"testing"
"time"
"github.com/maxatome/go-testdeep/td"
)
func TestCreateRecord(t *testing.T) {
record, err := CreateRecord("Bob", 23)
if td.CmpNoError(t, err) {
td.Cmp(t, record, &Record{
Id: 1234,
Name: "Bob",
Age: 23,
CreatedAt: time.Date(2019, time.May, 1, 12, 13, 14, 0, time.UTC),
})
}
}
But unfortunately, it is common to not know exactly the value of some fields…