Using anchoring
Operators can also directly be anchored in litterals, still using the
td.T type, avoiding the use of the
Struct operator:
import (
  "testing"
  "time"
  "github.com/maxatome/go-testdeep/td"
)
func TestCreateRecord(tt *testing.T) {
  t := td.NewT(tt)
  before := time.Now().Truncate(time.Second)
  record, err := CreateRecord("Bob", 23)
  if t.CmpNoError(err) {
    // Use RECORD instead of DATA in failure reports
    t.RootName("RECORD").
      Cmp(record,
        &Record{
          Name:      "Bob",
          Age:       23,
          Id:        t.Anchor(td.NotZero(), uint64(0)).(uint64),
          CreatedAt: t.Anchor(td.Between(before, time.Now())).(time.Time),
        },
        "Newly created record")
  }
}Test it in playground: https://play.golang.org/p/OzoW5CSNUP5
See the
Anchor
method documentation for details. Note that
A method
is also a synonym for Anchor.
          Id:        t.A(td.NotZero(), uint64(0)).(uint64),
          CreatedAt: t.A(td.Between(before, time.Now())).(time.Time),Thanks to generics, this can also be written as:
          Id:        td.Anchor[uint64](t, td.NotZero()),
          CreatedAt: td.Anchor[time.Time](t, td.Between(before, time.Now())),or
          Id:        td.A[uint64](t, td.NotZero()),
          CreatedAt: td.A[time.Time](t, td.Between(before, time.Now())),