title: Go goroutine test failing Expected number of calls
body: <p>I'm new to Go here. I am trying to test the function call inside my Go routine but it fails with the error message</p>
  <blockquote>
  <p>Expected number of calls (8) does not match the actual number of calls
  (0).</p>
  </blockquote>
  <p>My test code goes like:</p>
  <pre><code>package executor
  
  import (
      &quot;testing&quot;
    &quot;sync&quot;
      &quot;github.com/stretchr/testify/mock&quot;
  )
  
  type MockExecutor struct {
      mock.Mock
    wg sync.WaitGroup
  }
  
  func (m *MockExecutor) Execute() {
    defer m.wg.Done()
  }
  
  func TestScheduleWorksAsExpected(t *testing.T) {
  
      scheduler := GetScheduler()
      executor := &amp;MockExecutor{}
      scheduler.AddExecutor(executor)
  
      // Mock exptectations
      executor.On(&quot;Execute&quot;).Return()
      
  
      // Function Call
    executor.wg.Add(8)
      scheduler.Schedule(2, 1, 4)
    executor.wg.Wait()
  
    executor.AssertNumberOfCalls(t, &quot;Execute&quot;, 8)
  
  }
  </code></pre>
  <p>and my application code is:</p>
  <pre><code>package executor
  
  import (
      &quot;sync&quot;
      &quot;time&quot;
  )
  
  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 &amp;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 &lt; 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 &lt; int(repeatRuns); repeats += 1 {
          r.repeatRuns(parallelRuns)
          time.Sleep(time.Duration(coolDown))
      }
  
  }
  </code></pre>
  <p>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</p>