Documentation
¶
Overview ¶
Package testmarshal provides some assertions around marshalling/unmarshalling (serialization/deserialization) behavior for types. It is intended to reduce boilerplate in tests of the form:
func TestMyTypeUnmarshals(t *testing.T) {
type MyType struct{}
var mt MyType
require.NoError(t, json.Unmarshal([]byte("{}"), &mt))
assert.Equal(t, MyType{}, mt)
}
with assertion calls:
func TestMyTypeUnmarshals(t *testing.T) {
type MyType struct{}
testmarshal.AssertUnmarshals(t, testmarshal.JSONMarshaler, MyType{}, []byte("{}"))
}
Index ¶
- func AssertMarshalingRoundtrips(t *testing.T, marshaller Marshaler, example interface{}) bool
- func AssertMarshals(t *testing.T, marshaller Marshaler, toMarshal interface{}, expectedData []byte) bool
- func AssertUnmarshals(t *testing.T, marshaller Marshaler, expected interface{}, data []byte) bool
- func Require(t *testing.T, b bool)
- func TestMarshalersRoundtrip(t *testing.T, examples interface{}, marshallers []Marshaler)
- type Marshaler
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AssertMarshalingRoundtrips ¶
func TestMyTypeRoundtrips(t *testing.T) {
type MyType struct{}
testmarshal.AssertMarshalingRoundtrips(t, testmarshal.JSONMarshaler, MyType{})
}
func AssertMarshals ¶
func AssertMarshals(t *testing.T, marshaller Marshaler, toMarshal interface{}, expectedData []byte) bool
AssertMarshals checks that the given value marshals into data equal to expectedData.
It is intended to replace tests of the form:
func TestMyTypeMarshals(t *testing.T) {
type MyType struct{}
mt := MyType{}
d, err := json.Marshal(mt)
require.NoError(t, err)
assert.Equal(t, d, []byte("{}"))
}
with:
func TestMyTypeUnmarshals(t *testing.T) {
type MyType struct{}
testmarshal.AssertMarshals(t, testmarshal.JSONMarshaler, MyType{}, []byte("{}"))
}
func AssertUnmarshals ¶
func Require ¶
Require wraps an Assert call and turns it into a require.* call (fails if the assert fails).
func TestMarshalersRoundtrip ¶
TestMarshalersRoundtrip is a helper which runs a test for each provided marshaller on each example in examples (a slice of any type). The test checks that the marshaler "roundtrips" for each example, i.e.: marshaler.Unmarshal(marshaler.Marshal(example)) == example.
Types ¶
type Marshaler ¶
type Marshaler interface {
// Marshal converts a Go type into bytes
Marshal(interface{}) ([]byte, error)
// Unmarshal converts bytes into a Go type.
Unmarshal([]byte, interface{}) error
// ID identifies the protocol, mostly for use in test naming.
ID() string
}
Marshaler represents a serialization protocol, e.g. JSON or YAML
var ( // JSONMarshaler uses the encoding/json package to marshal types JSONMarshaler Marshaler = simpleMarshaler{ // contains filtered or unexported fields } // YAMLMarshaler uses the gopkg.in/yaml.v2 package to marshal types YAMLMarshaler Marshaler = simpleMarshaler{ // contains filtered or unexported fields } // TextMarshaler marshals types which implement both encoding.TextMarshaler // and encoding.TextUnmarshaler TextMarshaler Marshaler = simpleMarshaler{ // contains filtered or unexported fields } )