You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2023/05/09 15:20:02 UTC

[plc4x] branch develop updated: test(plc4go): ensure mocks are created with right test context

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new 5b8995e2d6 test(plc4go): ensure mocks are created with right test context
5b8995e2d6 is described below

commit 5b8995e2d6abe15d41578c43ad492ed8cbd5e167
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue May 9 17:19:53 2023 +0200

    test(plc4go): ensure mocks are created with right test context
---
 plc4go/spi/default/DefaultBrowser_test.go          |  15 +-
 plc4go/spi/default/DefaultCodec_test.go            |  40 +++--
 plc4go/spi/default/DefaultConnection_test.go       |  55 +++---
 .../SingleItemRequestInterceptor_test.go           |   3 +-
 plc4go/spi/model/DefaultPlcBrowseRequest_test.go   |  28 +--
 plc4go/spi/model/render_test.go                    |   1 +
 plc4go/spi/transports/TransportInstance_test.go    | 200 ++++++++++-----------
 plc4go/spi/utils/WriteBufferByteBased_test.go      |  22 +--
 8 files changed, 193 insertions(+), 171 deletions(-)

diff --git a/plc4go/spi/default/DefaultBrowser_test.go b/plc4go/spi/default/DefaultBrowser_test.go
index f7e45e1bd5..889b176dba 100644
--- a/plc4go/spi/default/DefaultBrowser_test.go
+++ b/plc4go/spi/default/DefaultBrowser_test.go
@@ -141,18 +141,19 @@ func Test_defaultBrowser_BrowseWithInterceptor(t *testing.T) {
 					t.Cleanup(cancelFunc)
 					return timeout
 				}(),
-				browseRequest: spiModel.NewDefaultPlcBrowseRequest(
-					map[string]apiModel.PlcQuery{
-						"test": NewMockPlcQuery(t),
-					},
-					[]string{"test"},
-					nil,
-				),
 			},
 			mockSetup: func(t *testing.T, fields *fields, args *args) {
 				requirements := NewMockDefaultBrowserRequirements(t)
 				requirements.EXPECT().BrowseQuery(mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(0, nil)
 				fields.DefaultBrowserRequirements = requirements
+				query := NewMockPlcQuery(t)
+				args.browseRequest = spiModel.NewDefaultPlcBrowseRequest(
+					map[string]apiModel.PlcQuery{
+						"test": query,
+					},
+					[]string{"test"},
+					nil,
+				)
 			},
 			wantAsserter: func(t *testing.T, results <-chan apiModel.PlcBrowseRequestResult) bool {
 				timeout := time.NewTimer(2 * time.Second)
diff --git a/plc4go/spi/default/DefaultCodec_test.go b/plc4go/spi/default/DefaultCodec_test.go
index 4dfb7f3305..664b92c986 100644
--- a/plc4go/spi/default/DefaultCodec_test.go
+++ b/plc4go/spi/default/DefaultCodec_test.go
@@ -329,24 +329,26 @@ func Test_defaultCodec_Connect(t *testing.T) {
 		customMessageHandling         func(codec DefaultCodecRequirements, message spi.Message) bool
 	}
 	tests := []struct {
-		name    string
-		fields  fields
-		wantErr assert.ErrorAssertionFunc
+		name      string
+		fields    fields
+		mockSetup func(t *testing.T, fields *fields)
+		wantErr   assert.ErrorAssertionFunc
 	}{
 		{
 			name: "connect it",
-			fields: fields{
-				transportInstance: func() transports.TransportInstance {
-					instance := NewMockTransportInstance(t)
-					instance.EXPECT().IsConnected().Return(true)
-					return instance
-				}(),
+			mockSetup: func(t *testing.T, fields *fields) {
+				instance := NewMockTransportInstance(t)
+				instance.EXPECT().IsConnected().Return(true)
+				fields.transportInstance = instance
 			},
 			wantErr: assert.NoError,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields)
+			}
 			m := &defaultCodec{
 				DefaultCodecRequirements:      tt.fields.DefaultCodecRequirements,
 				transportInstance:             tt.fields.transportInstance,
@@ -437,24 +439,26 @@ func Test_defaultCodec_Disconnect(t *testing.T) {
 		customMessageHandling         func(codec DefaultCodecRequirements, message spi.Message) bool
 	}
 	tests := []struct {
-		name    string
-		fields  fields
-		wantErr assert.ErrorAssertionFunc
+		name      string
+		fields    fields
+		mockSetup func(t *testing.T, fields *fields)
+		wantErr   assert.ErrorAssertionFunc
 	}{
 		{
 			name: "disconnect it",
-			fields: fields{
-				transportInstance: func() transports.TransportInstance {
-					instance := NewMockTransportInstance(t)
-					instance.EXPECT().Close().Return(nil)
-					return instance
-				}(),
+			mockSetup: func(t *testing.T, fields *fields) {
+				instance := NewMockTransportInstance(t)
+				instance.EXPECT().Close().Return(nil)
+				fields.transportInstance = instance
 			},
 			wantErr: assert.NoError,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields)
+			}
 			m := &defaultCodec{
 				DefaultCodecRequirements:      tt.fields.DefaultCodecRequirements,
 				transportInstance:             tt.fields.transportInstance,
diff --git a/plc4go/spi/default/DefaultConnection_test.go b/plc4go/spi/default/DefaultConnection_test.go
index 76c0e457d1..49ad8dd480 100644
--- a/plc4go/spi/default/DefaultConnection_test.go
+++ b/plc4go/spi/default/DefaultConnection_test.go
@@ -471,19 +471,23 @@ func Test_defaultConnection_BrowseRequestBuilder(t *testing.T) {
 		valueHandler                  spi.PlcValueHandler
 	}
 	tests := []struct {
-		name   string
-		fields fields
-		want   model.PlcBrowseRequestBuilder
+		name      string
+		fields    fields
+		mockSetup func(t *testing.T, fields *fields)
+		want      model.PlcBrowseRequestBuilder
 	}{
 		{
 			name: "create it",
-			fields: fields{
-				DefaultConnectionRequirements: NewMockDefaultConnectionRequirements(t),
+			mockSetup: func(t *testing.T, fields *fields) {
+				fields.DefaultConnectionRequirements = NewMockDefaultConnectionRequirements(t)
 			},
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields)
+			}
 			defer func() {
 				if err := recover(); err != nil {
 					assert.Equal(t, "not provided by actual connection", err)
@@ -776,31 +780,32 @@ func Test_defaultConnection_GetTransportInstance(t *testing.T) {
 		tagHandler                    spi.PlcTagHandler
 		valueHandler                  spi.PlcValueHandler
 	}
-	theInstance := NewMockTransportInstance(t)
+
 	tests := []struct {
 		name      string
 		fields    fields
-		mockSetup func(t *testing.T, fields *fields)
+		mockSetup func(t *testing.T, fields *fields, want *transports.TransportInstance)
 		want      transports.TransportInstance
 	}{
 		{
 			name: "get it",
-			mockSetup: func(t *testing.T, fields *fields) {
+			mockSetup: func(t *testing.T, fields *fields, want *transports.TransportInstance) {
 				requirements := NewMockDefaultConnectionRequirements(t)
 				codec := NewMockMessageCodec(t)
 				{
-					codec.EXPECT().GetTransportInstance().Return(theInstance)
+					instance := NewMockTransportInstance(t)
+					codec.EXPECT().GetTransportInstance().Return(instance)
+					*want = instance
 				}
 				requirements.EXPECT().GetMessageCodec().Return(codec)
 				fields.DefaultConnectionRequirements = requirements
 			},
-			want: theInstance,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			if tt.mockSetup != nil {
-				tt.mockSetup(t, &tt.fields)
+				tt.mockSetup(t, &tt.fields, &tt.want)
 			}
 			d := &defaultConnection{
 				DefaultConnectionRequirements: tt.fields.DefaultConnectionRequirements,
@@ -1177,20 +1182,24 @@ func Test_plcConnectionCloseResult_GetErr(t *testing.T) {
 		traces     []spi.TraceEntry
 	}
 	tests := []struct {
-		name    string
-		fields  fields
-		wantErr assert.ErrorAssertionFunc
+		name      string
+		fields    fields
+		mockSetup func(t *testing.T, fields *fields)
+		wantErr   assert.ErrorAssertionFunc
 	}{
 		{
 			name: "get it",
-			fields: fields{
-				connection: NewMockPlcConnection(t),
+			mockSetup: func(t *testing.T, fields *fields) {
+				fields.connection = NewMockPlcConnection(t)
 			},
 			wantErr: assert.NoError,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields)
+			}
 			d := &plcConnectionCloseResult{
 				connection: tt.fields.connection,
 				err:        tt.fields.err,
@@ -1259,20 +1268,24 @@ func Test_plcConnectionConnectResult_GetErr(t *testing.T) {
 		err        error
 	}
 	tests := []struct {
-		name    string
-		fields  fields
-		wantErr assert.ErrorAssertionFunc
+		name      string
+		fields    fields
+		mockSetup func(t *testing.T, fields *fields)
+		wantErr   assert.ErrorAssertionFunc
 	}{
 		{
 			name: "get it",
-			fields: fields{
-				connection: NewMockPlcConnection(t),
+			mockSetup: func(t *testing.T, fields *fields) {
+				fields.connection = NewMockPlcConnection(t)
 			},
 			wantErr: assert.NoError,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields)
+			}
 			d := &plcConnectionConnectResult{
 				connection: tt.fields.connection,
 				err:        tt.fields.err,
diff --git a/plc4go/spi/interceptors/SingleItemRequestInterceptor_test.go b/plc4go/spi/interceptors/SingleItemRequestInterceptor_test.go
index bf17dd825f..7c60fd0a84 100644
--- a/plc4go/spi/interceptors/SingleItemRequestInterceptor_test.go
+++ b/plc4go/spi/interceptors/SingleItemRequestInterceptor_test.go
@@ -402,8 +402,9 @@ func TestSingleItemRequestInterceptor_ProcessReadResponses(t *testing.T) {
 				},
 			},
 			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				result := NewMockPlcReadRequestResult(t)
 				args.readResults = []apiModel.PlcReadRequestResult{
-					NewMockPlcReadRequestResult(t),
+					result,
 				}
 			},
 			wantAssert: func(t *testing.T, args args, got apiModel.PlcReadRequestResult) bool {
diff --git a/plc4go/spi/model/DefaultPlcBrowseRequest_test.go b/plc4go/spi/model/DefaultPlcBrowseRequest_test.go
index 7b37d71e89..880d99fa79 100644
--- a/plc4go/spi/model/DefaultPlcBrowseRequest_test.go
+++ b/plc4go/spi/model/DefaultPlcBrowseRequest_test.go
@@ -42,32 +42,38 @@ func TestDefaultPlcBrowseRequestBuilder_AddQuery(t *testing.T) {
 		query string
 	}
 	tests := []struct {
-		name   string
-		fields fields
-		args   args
-		want   apiModel.PlcBrowseRequestBuilder
+		name      string
+		fields    fields
+		args      args
+		mockSetup func(t *testing.T, fields *fields, args *args, want *apiModel.PlcBrowseRequestBuilder)
+		want      apiModel.PlcBrowseRequestBuilder
 	}{
 		{
 			name: "add one",
 			fields: fields{
-				tagHandler:   NewMockPlcTagHandler(t),
 				queryStrings: map[string]string{},
 			},
 			args: args{
 				name:  "a name",
 				query: "a query",
 			},
-			want: &DefaultPlcBrowseRequestBuilder{
-				tagHandler: NewMockPlcTagHandler(t),
-				queryStrings: map[string]string{
-					"a name": "a query",
-				},
-				queryNames: []string{"a name"},
+			mockSetup: func(t *testing.T, fields *fields, args *args, want *apiModel.PlcBrowseRequestBuilder) {
+				fields.tagHandler = NewMockPlcTagHandler(t)
+				*want = &DefaultPlcBrowseRequestBuilder{
+					tagHandler: NewMockPlcTagHandler(t),
+					queryStrings: map[string]string{
+						"a name": "a query",
+					},
+					queryNames: []string{"a name"},
+				}
 			},
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields, &tt.args, &tt.want)
+			}
 			d := &DefaultPlcBrowseRequestBuilder{
 				tagHandler:   tt.fields.tagHandler,
 				browser:      tt.fields.browser,
diff --git a/plc4go/spi/model/render_test.go b/plc4go/spi/model/render_test.go
index 7710bd0cb8..e721112ecf 100644
--- a/plc4go/spi/model/render_test.go
+++ b/plc4go/spi/model/render_test.go
@@ -97,6 +97,7 @@ func TestRenderTest(t *testing.T) {
 	}
 }
 
+// TODO: ensure mocks are created in test context...
 // TestRenderTestCustom test some custom objects
 func TestRenderTestCustom(t *testing.T) {
 	tests := []struct {
diff --git a/plc4go/spi/transports/TransportInstance_test.go b/plc4go/spi/transports/TransportInstance_test.go
index e1ac2c8fa5..1a9a7cbfd1 100644
--- a/plc4go/spi/transports/TransportInstance_test.go
+++ b/plc4go/spi/transports/TransportInstance_test.go
@@ -59,20 +59,14 @@ func Test_defaultBufferedTransportInstance_ConnectWithContext(t *testing.T) {
 		ctx context.Context
 	}
 	tests := []struct {
-		name    string
-		fields  fields
-		args    args
-		wantErr bool
+		name      string
+		fields    fields
+		args      args
+		mockSetup func(t *testing.T, fields *fields, args *args)
+		wantErr   bool
 	}{
 		{
 			name: "connect",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: func() DefaultBufferedTransportInstanceRequirements {
-					requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
-					requirements.EXPECT().Connect().Return(nil)
-					return requirements
-				}(),
-			},
 			args: args{
 				func() context.Context {
 					ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
@@ -80,12 +74,14 @@ func Test_defaultBufferedTransportInstance_ConnectWithContext(t *testing.T) {
 					return ctx
 				}(),
 			},
+			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				requirements.EXPECT().Connect().Return(nil)
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
+			},
 		},
 		{
 			name: "connect canceled",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: NewMockDefaultBufferedTransportInstanceRequirements(t),
-			},
 			args: args{
 				func() context.Context {
 					ctx, cancel := context.WithCancel(context.Background())
@@ -93,11 +89,18 @@ func Test_defaultBufferedTransportInstance_ConnectWithContext(t *testing.T) {
 					return ctx
 				}(),
 			},
+			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
+			},
 			wantErr: true,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields, &tt.args)
+			}
 			m := &defaultBufferedTransportInstance{
 				DefaultBufferedTransportInstanceRequirements: tt.fields.DefaultBufferedTransportInstanceRequirements,
 			}
@@ -116,53 +119,50 @@ func Test_defaultBufferedTransportInstance_FillBuffer(t *testing.T) {
 		until func(pos uint, currentByte byte, reader *bufio.Reader) bool
 	}
 	tests := []struct {
-		name    string
-		fields  fields
-		args    args
-		wantErr bool
+		name      string
+		fields    fields
+		args      args
+		mockSetup func(t *testing.T, fields *fields, args *args)
+		wantErr   bool
 	}{
 		{
 			name: "fill it",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: func() DefaultBufferedTransportInstanceRequirements {
-					requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
-					requirements.EXPECT().GetReader().Return(nil)
-					return requirements
-				}(),
+			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				expect := requirements.EXPECT()
+				expect.GetReader().Return(nil)
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
 			},
 		},
 		{
 			name: "fill it with reader",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: func() DefaultBufferedTransportInstanceRequirements {
-					defaultBufferedTransportInstanceRequirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
-					expect := defaultBufferedTransportInstanceRequirements.EXPECT()
-					expect.GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0, 0x0})))
-					return defaultBufferedTransportInstanceRequirements
-				}(),
-			},
 			args: args{func(pos uint, currentByte byte, reader *bufio.Reader) bool {
 				return pos < 1
 			}},
+			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				requirements.EXPECT().GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0, 0x0})))
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
+			},
 		},
 		{
 			name: "fill it with reader errors",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: func() DefaultBufferedTransportInstanceRequirements {
-					defaultBufferedTransportInstanceRequirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
-					expect := defaultBufferedTransportInstanceRequirements.EXPECT()
-					expect.GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0, 0x0})))
-					return defaultBufferedTransportInstanceRequirements
-				}(),
-			},
 			args: args{func(pos uint, currentByte byte, reader *bufio.Reader) bool {
 				return pos < 2
 			}},
+			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				requirements.EXPECT().GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0, 0x0})))
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
+			},
 			wantErr: true,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields, &tt.args)
+			}
 			m := &defaultBufferedTransportInstance{
 				DefaultBufferedTransportInstanceRequirements: tt.fields.DefaultBufferedTransportInstanceRequirements,
 			}
@@ -178,36 +178,35 @@ func Test_defaultBufferedTransportInstance_GetNumBytesAvailableInBuffer(t *testi
 		DefaultBufferedTransportInstanceRequirements DefaultBufferedTransportInstanceRequirements
 	}
 	tests := []struct {
-		name    string
-		fields  fields
-		want    uint32
-		wantErr bool
+		name      string
+		fields    fields
+		want      uint32
+		mockSetup func(t *testing.T, fields *fields)
+		wantErr   bool
 	}{
 		{
 			name: "get it without reader",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: func() DefaultBufferedTransportInstanceRequirements {
-					requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
-					requirements.EXPECT().GetReader().Return(nil)
-					return requirements
-				}(),
+			mockSetup: func(t *testing.T, fields *fields) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				requirements.EXPECT().GetReader().Return(nil)
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
 			},
 		},
 		{
 			name: "get it with reader",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: func() DefaultBufferedTransportInstanceRequirements {
-					defaultBufferedTransportInstanceRequirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
-					expect := defaultBufferedTransportInstanceRequirements.EXPECT()
-					expect.GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0, 0x0})))
-					return defaultBufferedTransportInstanceRequirements
-				}(),
+			mockSetup: func(t *testing.T, fields *fields) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				requirements.EXPECT().GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0, 0x0})))
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
 			},
 			want: 2,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields)
+			}
 			m := &defaultBufferedTransportInstance{
 				DefaultBufferedTransportInstanceRequirements: tt.fields.DefaultBufferedTransportInstanceRequirements,
 			}
@@ -231,39 +230,38 @@ func Test_defaultBufferedTransportInstance_PeekReadableBytes(t *testing.T) {
 		numBytes uint32
 	}
 	tests := []struct {
-		name    string
-		fields  fields
-		args    args
-		want    []byte
-		wantErr bool
+		name      string
+		fields    fields
+		args      args
+		mockSetup func(t *testing.T, fields *fields, args *args)
+		want      []byte
+		wantErr   bool
 	}{
 		{
 			name: "peek it without reader",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: func() DefaultBufferedTransportInstanceRequirements {
-					requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
-					requirements.EXPECT().GetReader().Return(nil)
-					return requirements
-				}(),
+			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				requirements.EXPECT().GetReader().Return(nil)
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
 			},
 			wantErr: true,
 		},
 		{
 			name: "peek it with reader",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: func() DefaultBufferedTransportInstanceRequirements {
-					defaultBufferedTransportInstanceRequirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
-					expect := defaultBufferedTransportInstanceRequirements.EXPECT()
-					expect.GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0, 0x0})))
-					return defaultBufferedTransportInstanceRequirements
-				}(),
-			},
 			args: args{numBytes: 2},
+			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				requirements.EXPECT().GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0, 0x0})))
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
+			},
 			want: []byte{0x0, 0x0},
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields, &tt.args)
+			}
 			m := &defaultBufferedTransportInstance{
 				DefaultBufferedTransportInstanceRequirements: tt.fields.DefaultBufferedTransportInstanceRequirements,
 			}
@@ -287,52 +285,48 @@ func Test_defaultBufferedTransportInstance_Read(t *testing.T) {
 		numBytes uint32
 	}
 	tests := []struct {
-		name    string
-		fields  fields
-		args    args
-		want    []byte
-		wantErr bool
+		name      string
+		fields    fields
+		args      args
+		mockSetup func(t *testing.T, fields *fields, args *args)
+		want      []byte
+		wantErr   bool
 	}{
 		{
 			name: "read it without reader",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: func() DefaultBufferedTransportInstanceRequirements {
-					requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
-					requirements.EXPECT().GetReader().Return(nil)
-					return requirements
-				}(),
+			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				requirements.EXPECT().GetReader().Return(nil)
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
 			},
 			wantErr: true,
 		},
 		{
 			name: "read it with reader",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: func() DefaultBufferedTransportInstanceRequirements {
-					defaultBufferedTransportInstanceRequirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
-					expect := defaultBufferedTransportInstanceRequirements.EXPECT()
-					expect.GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0, 0x0})))
-					return defaultBufferedTransportInstanceRequirements
-				}(),
-			},
 			args: args{numBytes: 2},
+			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				requirements.EXPECT().GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0, 0x0})))
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
+			},
 			want: []byte{0x0, 0x0},
 		},
 		{
 			name: "read it with reader errors",
-			fields: fields{
-				DefaultBufferedTransportInstanceRequirements: func() DefaultBufferedTransportInstanceRequirements {
-					defaultBufferedTransportInstanceRequirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
-					expect := defaultBufferedTransportInstanceRequirements.EXPECT()
-					expect.GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0})))
-					return defaultBufferedTransportInstanceRequirements
-				}(),
+			args: args{numBytes: 2},
+			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				requirements := NewMockDefaultBufferedTransportInstanceRequirements(t)
+				requirements.EXPECT().GetReader().Return(bufio.NewReader(bytes.NewReader([]byte{0x0})))
+				fields.DefaultBufferedTransportInstanceRequirements = requirements
 			},
-			args:    args{numBytes: 2},
 			wantErr: true,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields, &tt.args)
+			}
 			m := &defaultBufferedTransportInstance{
 				DefaultBufferedTransportInstanceRequirements: tt.fields.DefaultBufferedTransportInstanceRequirements,
 			}
diff --git a/plc4go/spi/utils/WriteBufferByteBased_test.go b/plc4go/spi/utils/WriteBufferByteBased_test.go
index be1916ad7d..3dcd4a5d8c 100644
--- a/plc4go/spi/utils/WriteBufferByteBased_test.go
+++ b/plc4go/spi/utils/WriteBufferByteBased_test.go
@@ -855,10 +855,11 @@ func Test_byteWriteBuffer_WriteSerializable(t *testing.T) {
 		serializable Serializable
 	}
 	tests := []struct {
-		name    string
-		fields  fields
-		args    args
-		wantErr assert.ErrorAssertionFunc
+		name      string
+		fields    fields
+		args      args
+		mockSetup func(t *testing.T, fields *fields, args *args)
+		wantErr   assert.ErrorAssertionFunc
 	}{
 		{
 			name: "write it",
@@ -872,18 +873,19 @@ func Test_byteWriteBuffer_WriteSerializable(t *testing.T) {
 			fields: fields{
 				writer: bitio.NewWriter(new(bytes.Buffer)),
 			},
-			args: args{
-				serializable: func() Serializable {
-					serializable := NewMockSerializable(t)
-					serializable.EXPECT().SerializeWithWriteBuffer(mock.Anything, mock.Anything).Return(nil)
-					return serializable
-				}(),
+			mockSetup: func(t *testing.T, fields *fields, args *args) {
+				serializable := NewMockSerializable(t)
+				serializable.EXPECT().SerializeWithWriteBuffer(mock.Anything, mock.Anything).Return(nil)
+				args.serializable = serializable
 			},
 			wantErr: assert.NoError,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields, &tt.args)
+			}
 			wb := &byteWriteBuffer{
 				data:      tt.fields.data,
 				writer:    tt.fields.writer,