虽然不是您的问题的根源,但您的测试配置有一些竞争条件,您应该在它们引起问题之前进行处理。始终检查问题 -race 选项。您还应该让操作系统分配端口,这样您就不会遇到冲突。例如,参见如何 httptest.Server 作品。
-race
httptest.Server
你在这里的失败是你没有创造新的 rpc.Server 对于每个测试,你重复使用 rpc.DefaultServer 。第一次打电话给 CreateRPCServer 注册一个 TestAPI 以...之名 TestMaster 。每个后续调用都使用已注册的实例。
rpc.Server
rpc.DefaultServer
CreateRPCServer
TestAPI
TestMaster
如果你创建一个新的 rpc.Server 每次设置测试并注册新的TestAPI时,最终测试都会通过。
srv := rpc.NewServer() srv.RegisterName("TestMaster", testAPI) ... // and then use srv to handle the new connection srv.ServeCodec(RpcCodecServer(conn))