2025-09-26 19:29:41 +00:00
2025-09-26 15:32:27 -04:00
2025-09-26 15:32:27 -04:00

lazy

Lazy is a helper tool when working with SQLx and sqlmock that generates mock data based on the result struct.

GenerateRandomResults

This function expects the SQL query, the example response object, and an optional primary key to set.

Query The SQL query argument is taken and rebound using sqlx.AT bindvar type, this allows the returned query to be used directly in a sqlmock ExpectQuery check.

Example Object The example object argument must be a struct and requires "db" tags. The db tags are then parsed and used to calculate the psuedo-random rows and values

Primary Key The optional primary key argument is used to hardcode a primary key field in the returned mocks, the primary key field in the example struct must have a lazy tag with the value "key"

Row Count Row count sets the amount of mock rows to generate, if set to 0 then one row will be generated. If primary keys are provided you must provide one per row.

type Mock struct {
    Field1 string `db:"field1" lazy:"key"`
}

Example

func Test() {
    testArg := 123
    query := `SELECT ...`
    type results struct {
        Field1 string   `db:"field1" lazy:"key"`
        Field2 int      `db:"field2"`
    }

    rando, err := GenerateRandomResults(query, results{}, []any{testArg}, 1)
    if err != nil {
        panic(err)
    }

    //the rando object will now have psuedo random values in all fields except for the field containing the test tag set to "key" that field will be hardcoded with the testArg to allow for unit tests to ensure the requested ID flows through
    rows := sqlmock.NewRows(rando.Columns).AddRows(rando.Rows...)
    mock.ExpectQuery(rando.Query).WithArgs(testArg).WillReturnRows(rows)

    ...
}
Description
a helper tool for using sqlmock with sqlx tests
Readme 86 KiB
v1.1.0 Latest
2025-09-26 22:59:01 +00:00
Languages
Go 100%