I'm new to Golang here. I am trying to test the function call inside my Go routine but it fails with the error message
Expected number of calls (8) does not match the actual number of calls (0).
My test code goes like:
package executor import ( "testing" "sync" "github.com/stretchr/testify/mock" ) type MockExecutor struct { mock.Mock wg sync.WaitGroup } func (m *MockExecutor) Execute() { defer m.wg.Done() } func TestScheduleWorksAsExpected(t *testing.T) { scheduler := GetScheduler() executor := &MockExecutor{} scheduler.AddExecutor(executor) // Mock exptectations executor.On("Execute").Return() // Function Call executor.wg.Add(8) scheduler.Schedule(2, 1, 4) executor.wg.Wait() executor.AssertNumberOfCalls(t, "Execute", 8) }
and my application code is:
package executor import ( "sync" "time" ) type Scheduler interface { Schedule(repeatRuns uint16, coolDown uint8, parallelRuns uint64) AddExecutor(executor Executor) } type RepeatScheduler struct { executor Executor waitGroup sync.WaitGroup } func GetScheduler() Scheduler { return &RepeatScheduler{} } func (r *RepeatScheduler) singleRun() { defer r.waitGroup.Done() r.executor.Execute() } func (r *RepeatScheduler) AddExecutor(executor Executor) { r.executor = executor } func (r *RepeatScheduler) repeatRuns(parallelRuns uint64) { for count := 0; count < int(parallelRuns); count += 1 { r.waitGroup.Add(1) go r.singleRun() } r.waitGroup.Wait() } func (r *RepeatScheduler) Schedule(repeatRuns uint16, coolDown uint8, parallelRuns uint64) { for repeats := 0; repeats < int(repeatRuns); repeats += 1 { r.repeatRuns(parallelRuns) time.Sleep(time.Duration(coolDown)) } }
Could you point out to me what I could be doing wrong here? I'm using Go 1.16.3. When I debug my code, I can see the Execute() function being called but testify is not able to register the function call
https://stackoverflow.com/questions/67410367/golang-goroutine-test-failing-expected-number-of-calls May 06, 2021 at 08:25AM
没有评论:
发表评论