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

package mocks

import (
	mock "github.com/stretchr/testify/mock"

	testing "testing"

	time "time"
)

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

// C provides a mock function with given fields:
func (_m *TimeTicker) C() <-chan time.Time {
	ret := _m.Called()

	var r0 <-chan time.Time
	if rf, ok := ret.Get(0).(func() <-chan time.Time); ok {
		r0 = rf()
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(<-chan time.Time)
		}
	}

	return r0
}

// Reset provides a mock function with given fields: d
func (_m *TimeTicker) Reset(d time.Duration) {
	_m.Called(d)
}

// Stop provides a mock function with given fields:
func (_m *TimeTicker) Stop() {
	_m.Called()
}

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

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

	return mock
}
