diff --git a/filter/filter_impl/tracing_filter.go b/filter/filter_impl/tracing_filter.go
index 3289002e06c2695ce065e534afc7f8d09ba27186..fc0a2918190634baaf3643c9edb0bc9e50c71874 100644
--- a/filter/filter_impl/tracing_filter.go
+++ b/filter/filter_impl/tracing_filter.go
@@ -35,7 +35,7 @@ const (
 
 // this should be executed before users set their own Tracer
 func init() {
-	extension.SetFilter(tracingFilterName, NewTracingFilter)
+	extension.SetFilter(tracingFilterName, newTracingFilter)
 	opentracing.SetGlobalTracer(opentracing.NoopTracer{})
 }
 
@@ -44,10 +44,10 @@ var (
 	successKey = "Success"
 )
 
-type TracingFilter struct {
+type tracingFilter struct {
 }
 
-func (tf *TracingFilter) Invoke(invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
+func (tf *tracingFilter) Invoke(invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
 
 	operationName := invoker.GetUrl().ServiceKey() + invocation.MethodName()
 	// withTimeout after we support the timeout between different ends.
@@ -67,17 +67,17 @@ func (tf *TracingFilter) Invoke(invoker protocol.Invoker, invocation protocol.In
 	return result
 }
 
-func (tf *TracingFilter) OnResponse(result protocol.Result, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
-	panic("implement me")
+func (tf *tracingFilter) OnResponse(result protocol.Result, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
+	return result
 }
 
 var (
-	tracingFilterInstance *TracingFilter
+	tracingFilterInstance *tracingFilter
 )
 
-func NewTracingFilter() filter.Filter {
+func newTracingFilter() filter.Filter {
 	if tracingFilterInstance == nil {
-		tracingFilterInstance = &TracingFilter{}
+		tracingFilterInstance = &tracingFilter{}
 	}
 	return tracingFilterInstance
 }
diff --git a/filter/filter_impl/tracing_filter_test.go b/filter/filter_impl/tracing_filter_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..9188722121e5fd76e311e61181d8b4324f517696
--- /dev/null
+++ b/filter/filter_impl/tracing_filter_test.go
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package filter_impl
+
+import (
+	"context"
+	"testing"
+
+	"github.com/apache/dubbo-go/common"
+	"github.com/apache/dubbo-go/protocol"
+	"github.com/apache/dubbo-go/protocol/invocation"
+)
+
+func TestTracingFilter_Invoke(t *testing.T) {
+	url, _ := common.NewURL(context.Background(),
+		"dubbo://:20000/UserProvider?app.version=0.0.1&application=BDTService&bean.name=UserProvider"+
+			"&cluster=failover&environment=dev&group=&interface=com.ikurento.user.UserProvider&loadbalance=random&methods.GetUser."+
+			"loadbalance=random&methods.GetUser.retries=1&methods.GetUser.weight=0&module=dubbogo+user-info+server&name="+
+			"BDTService&organization=ikurento.com&owner=ZX&registry.role=3&retries=&"+
+			"service.filter=echo%2Ctoken%2Caccesslog&timestamp=1569153406&token=934804bf-b007-4174-94eb-96e3e1d60cc7&version=&warmup=100")
+	invoker := protocol.NewBaseInvoker(url)
+
+	attach := make(map[string]string, 10)
+	inv := invocation.NewRPCInvocation("MethodName", []interface{}{"OK", "Hello"}, attach)
+
+	tf := newTracingFilter()
+	tf.Invoke(invoker, inv)
+}