// Code generated by mockery v0.0.0-dev. DO NOT EDIT.

package mocks

import (
	testing "testing"

	mock "github.com/stretchr/testify/mock"
)

// QueryCommand is an autogenerated mock type for the QueryCommand type
type QueryCommand struct {
	mock.Mock
}

// Read provides a mock function with given fields:
func (_m *QueryCommand) Read() ([]byte, error) {
	ret := _m.Called()

	var r0 []byte
	if rf, ok := ret.Get(0).(func() []byte); ok {
		r0 = rf()
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).([]byte)
		}
	}

	var r1 error
	if rf, ok := ret.Get(1).(func() error); ok {
		r1 = rf()
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// NewQueryCommand creates a new instance of QueryCommand. It also registers a cleanup function to assert the mocks expectations.
func NewQueryCommand(t testing.TB) *QueryCommand {
	mock := &QueryCommand{}

	t.Cleanup(func() { mock.AssertExpectations(t) })

	return mock
}
