package concurrent import ( "testing" "github.com/golang/mock/gomock" "golang.org/x/net/context" mock "github.com/golang/mock/sample/concurrent/mock" ) func call(ctx context.Context, m Math) (int, error) { result := make(chan int) go func() { result <- m.Sum(1, 2) close(result) }() select { case r := <-result: return r, nil case <-ctx.Done(): return 0, ctx.Err() } } // testConcurrentFails is expected to fail (and is disabled). It // demonstrates how to use gomock.WithContext to interrupt the test // from a different goroutine. func testConcurrentFails(t *testing.T) { ctrl, ctx := gomock.WithContext(context.Background(), t) defer ctrl.Finish() m := mock.NewMockMath(ctrl) if _, err := call(ctx, m); err != nil { t.Error("call failed:", err) } } func TestConcurrentWorks(t *testing.T) { ctrl, ctx := gomock.WithContext(context.Background(), t) defer ctrl.Finish() m := mock.NewMockMath(ctrl) m.EXPECT().Sum(1, 2).Return(3) if _, err := call(ctx, m); err != nil { t.Error("call failed:", err) } }