diff --git a/picker_test.go b/picker_test.go
index efe0c23..70dae20 100644
--- a/picker_test.go
+++ b/picker_test.go
@@ -36,6 +36,7 @@
 import (
 	"fmt"
 	"math"
+	"sync"
 	"testing"
 	"time"
 
@@ -50,6 +51,7 @@
 	side     chan int
 	// the channel to notifiy update injector that the update reading is done
 	readDone chan int
+	wg       *sync.WaitGroup
 }
 
 func (w *testWatcher) Next() (updates []*naming.Update, err error) {
@@ -81,6 +83,7 @@
 type testNameResolver struct {
 	w    *testWatcher
 	addr string
+	wg   *sync.WaitGroup
 }
 
 func (r *testNameResolver) Resolve(target string) (naming.Watcher, error) {
@@ -88,6 +91,7 @@
 		update:   make(chan *naming.Update, 1),
 		side:     make(chan int, 1),
 		readDone: make(chan int),
+		wg:       r.wg,
 	}
 	r.w.side <- 1
 	r.w.update <- &naming.Update{
@@ -96,11 +100,14 @@
 	}
 	go func() {
 		<-r.w.readDone
+		if r.w.wg != nil {
+			r.w.wg.Done()
+		}
 	}()
 	return r.w, nil
 }
 
-func startServers(t *testing.T, numServers, port int, maxStreams uint32) ([]*server, *testNameResolver) {
+func startServers(t *testing.T, numServers, port int, maxStreams uint32, wg *sync.WaitGroup) ([]*server, *testNameResolver) {
 	var servers []*server
 	for i := 0; i < numServers; i++ {
 		s := &server{readyChan: make(chan bool)}
@@ -110,12 +117,15 @@
 	}
 	// Point to server1
 	addr := "127.0.0.1:" + servers[0].port
-	return servers, &testNameResolver{addr: addr}
+	return servers, &testNameResolver{
+		addr: addr,
+		wg: wg,
+	}
 }
 
 func TestNameDiscovery(t *testing.T) {
 	// Start 3 servers on 3 ports.
-	servers, r := startServers(t, 3, 0, math.MaxUint32)
+	servers, r := startServers(t, 3, 0, math.MaxUint32, nil)
 	cc, err := Dial("foo.bar.com", WithPicker(NewUnicastNamingPicker(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{}))
 	if err != nil {
 		t.Fatalf("Failed to create ClientConn: %v", err)
@@ -156,7 +166,9 @@
 }
 
 func TestEmptyAddrs(t *testing.T) {
-	servers, r := startServers(t, 1, 0, math.MaxUint32)
+	var wg sync.WaitGroup
+	servers, r := startServers(t, 1, 0, math.MaxUint32, &wg)
+	wg.Add(1)
 	cc, err := Dial("foo.bar.com", WithPicker(NewUnicastNamingPicker(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{}))
 	if err != nil {
 		t.Fatalf("Failed to create ClientConn: %v", err)
@@ -172,6 +184,7 @@
 		Op:   naming.Delete,
 		Addr: "127.0.0.1:" + servers[0].port,
 	})
+	wg.Wait()
 	r.w.inject(updates)
 	ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond)
 	if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc); err == nil {
