1//go:build example 2// +build example 3 4// Unit tests for package unitTest. 5package unitTest 6 7import ( 8 "errors" 9 "testing" 10 11 "github.com/aws/aws-sdk-go/aws" 12 "github.com/aws/aws-sdk-go/service/dynamodb" 13 "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbiface" 14) 15 16// A fakeDynamoDB instance. During testing, instatiate ItemGetter, then simply 17// assign an instance of fakeDynamoDB to it. 18type fakeDynamoDB struct { 19 dynamodbiface.DynamoDBAPI 20 payload map[string]string // Store expected return values 21 err error 22} 23 24// Mock GetItem such that the output returned carries values identical to input. 25func (fd *fakeDynamoDB) GetItem(input *dynamodb.GetItemInput) (*dynamodb.GetItemOutput, error) { 26 output := new(dynamodb.GetItemOutput) 27 output.Item = make(map[string]*dynamodb.AttributeValue) 28 for key, value := range fd.payload { 29 output.Item[key] = &dynamodb.AttributeValue{ 30 S: aws.String(value), 31 } 32 } 33 return output, fd.err 34} 35 36func TestItemGetterGet(t *testing.T) { 37 expectedKey := "expected key" 38 expectedValue := "expected value" 39 getter := new(ItemGetter) 40 getter.DynamoDB = &fakeDynamoDB{ 41 payload: map[string]string{"id": expectedKey, "value": expectedValue}, 42 } 43 if actualValue := getter.Get(expectedKey); actualValue != expectedValue { 44 t.Errorf("Expected %q but got %q", expectedValue, actualValue) 45 } 46} 47 48// When DynamoDB.GetItem returns a non-nil error, expect an empty string. 49func TestItemGetterGetFail(t *testing.T) { 50 expectedKey := "expected key" 51 expectedValue := "expected value" 52 getter := new(ItemGetter) 53 getter.DynamoDB = &fakeDynamoDB{ 54 payload: map[string]string{"id": expectedKey, "value": expectedValue}, 55 err: errors.New("any error"), 56 } 57 if actualValue := getter.Get(expectedKey); len(actualValue) > 0 { 58 t.Errorf("Expected %q but got %q", expectedValue, actualValue) 59 } 60} 61