diff --git a/core/api.go b/core/api.go
index 8a6fdd3..694383a 100644
--- a/core/api.go
+++ b/core/api.go
@@ -18,8 +18,10 @@
 
 import "fmt"
 
+const GoClientVersion = "Go Client V1.2.0, Support CPP Core:V1.2.X"
+
 func Version() (version string) {
-	return GetVersion()
+	return GoClientVersion
 }
 
 type ClientConfig struct {
diff --git a/core/api_test.go b/core/api_test.go
index 01f360b..603ce7a 100644
--- a/core/api_test.go
+++ b/core/api_test.go
@@ -75,3 +75,14 @@
 		" MessageBatchMaxSize: 32, MessageModel: Clustering, ]"
 	assert.Equal(t, expect, pcConfig.String())
 }
+
+func TestMessageModel_String(t *testing.T) {
+	m := BroadCasting
+	assert.Equal(t, "BroadCasting", m.String())
+
+	m = Clustering
+	assert.Equal(t, "Clustering", m.String())
+
+	m = 3
+	assert.Equal(t, "Unknown", m.String())
+}
diff --git a/core/producer.go b/core/producer.go
index fe2d978..7df57e6 100644
--- a/core/producer.go
+++ b/core/producer.go
@@ -235,12 +235,12 @@
 		unsafe.Pointer(&key),
 		C.int(autoRetryTimes),
 		&sr))
-	
+
 	if err != NIL {
 		log.Warnf("send message orderly error, error is: %s", err.Error())
 		return nil, err
 	}
-	
+
 	return &SendResult{
 		Status: SendStatus(sr.sendStatus),
 		MsgId:  C.GoString(&sr.msgId[0]),
@@ -257,7 +257,7 @@
 		log.Warnf("send message with oneway error, error is: %s", err.Error())
 		return err
 	}
-	
+
 	log.Debugf("Send Message: %s with oneway success.", msg.String())
 	return nil
 }
diff --git a/core/producer_test.go b/core/producer_test.go
index 04c007b..b70cee7 100644
--- a/core/producer_test.go
+++ b/core/producer_test.go
@@ -16,28 +16,3 @@
  */
 package rocketmq
 
-//func TestCreateMessage(test *testing.T){
-//    fmt.Println("-----TestCreateMessage Start----")
-//    rocketmq.CreateMessage("testTopic")
-//    fmt.Println("-----TestCreateMessage Finish----")
-//}
-//
-//func TestDestroyMessage(test *testing.T){
-//    fmt.Println("-----TestCreateMessage Start----")
-//    msg := rocketmq.CreateMessage("testTopic")
-//    rocketmq.DestroyMessage(msg)
-//    fmt.Println("-----TestCreateMessage Finish----")
-//}
-//func TestSetMessageKeys(test *testing.T){
-//    fmt.Println("-----TestSetMessageKeys Start----")
-//    msg := rocketmq.CreateMessage("testTopic")
-//    len := rocketmq.SetMessageKeys(msg,"testKey")
-//    fmt.Println("Len:",len)
-//    rocketmq.DestroyMessage(msg)
-//    fmt.Println("-----TestCreateMessage Finish----")
-//}
-//func TestCreateProducer(test *testing.T){
-//    fmt.Println("-----TestCreateProducer Start----")
-//    rocketmq.CreateProducer("testGroupId")
-//    fmt.Println("-----TestCreateProducer Finish----")
-//}
diff --git a/core/push_consumer.go b/core/push_consumer.go
index 90e1454..c222587 100644
--- a/core/push_consumer.go
+++ b/core/push_consumer.go
@@ -32,11 +32,11 @@
 import "C"
 
 import (
+	"errors"
 	"fmt"
 	log "github.com/sirupsen/logrus"
 	"sync"
 	"unsafe"
-	"errors"
 )
 
 type ConsumeStatus int
diff --git a/core/push_consumer_test.go b/core/push_consumer_test.go
index 22c1444..4c806b8 100644
--- a/core/push_consumer_test.go
+++ b/core/push_consumer_test.go
@@ -14,15 +14,4 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package rocketmq
-
-//import "fmt"
-//import "testing"
-//import "../client"
-//
-//func TestCreatePushConsumer(test *testing.T){
-//    fmt.Println("-----TestCreateProducer Start----")
-//    consumer := rocketmq.CreatePushConsumer("testGroupId")
-//    rocketmq.DestroyPushConsumer(consumer)
-//    fmt.Println("-----TestCreateProducer Finish----")
-//}
+package rocketmq
\ No newline at end of file
diff --git a/core/queue.go b/core/queue.go
deleted file mode 100644
index 47f10ef..0000000
--- a/core/queue.go
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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 rocketmq
-
-import "fmt"
-
-// MessageQueue the queue of the message
-type MessageQueue struct {
-	Topic  string
-	Broker string
-	ID     int
-}
-
-func (q *MessageQueue) String() string {
-	return fmt.Sprintf("broker:%s, topic:%s, id:%d", q.Broker, q.Topic, q.ID)
-}
diff --git a/core/queue_selector.go b/core/queue_selector.go
index 7bf1927..45631b3 100644
--- a/core/queue_selector.go
+++ b/core/queue_selector.go
@@ -18,11 +18,23 @@
 
 import "C"
 import (
+	"fmt"
 	"strconv"
 	"sync"
 	"unsafe"
 )
 
+// MessageQueue the queue of the message
+type MessageQueue struct {
+	Topic  string
+	Broker string
+	ID     int
+}
+
+func (q *MessageQueue) String() string {
+	return fmt.Sprintf("broker:%s, topic:%s, id:%d", q.Broker, q.Topic, q.ID)
+}
+
 var selectors = selectorHolder{selectors: map[int]*messageQueueSelectorWrapper{}}
 
 //export queueSelectorCallback
diff --git a/core/version.go b/core/version.go
deleted file mode 100644
index 95ff0f3..0000000
--- a/core/version.go
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * 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 rocketmq
-
-const GoClientVersion = "Go Client V1.2.0, Support CPP Core:V1.2.X"
-
-func GetVersion() (version string) {
-	return GoClientVersion
-}
diff --git a/core/version_test.go b/core/version_test.go
deleted file mode 100644
index 85f43c1..0000000
--- a/core/version_test.go
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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 rocketmq
-
-//import (
-//    "fmt"
-//    "testing"
-//    "../client"
-//)
-//
-//func TestGetVersion(test *testing.T){
-//    fmt.Println("-----TestGetVersion Start----")
-//    version := rocketmq.GetVersion();
-//    fmt.Println(version)
-//    fmt.Println("-----TestGetVersion Finish----")
-//}
diff --git a/doc/Introduction.md b/docs/Introduction.md
similarity index 100%
rename from doc/Introduction.md
rename to docs/Introduction.md
diff --git a/docs/test_case.md b/docs/test_case.md
new file mode 100644
index 0000000..5c176c1
--- /dev/null
+++ b/docs/test_case.md
@@ -0,0 +1,77 @@
+# Apache RocketMQ Golang Client Test Case List
+
+## Unit Test
+**TODO: How to mock cgo API**
+
+### core package
+#### api.go
+- [ ] `func (config *ClientConfig) String() string`
+- [x] `func (config *ProducerConfig) String() string`
+- [x] `func (mode MessageModel) String() string`
+- [x] `func (config *PushConsumerConfig) String() string`
+- [ ] `func (config *PullConsumerConfig) String() string`
+- [ ] `func (session *SessionCredentials) String() string`
+- [ ] `func (result *SendResult) String() string`
+
+#### cfuns.go
+- [ ] `func consumeMessageCallback(cconsumer *C.CPushConsumer, msg *C.CMessageExt) C.int `
+
+#### error.go
+- [ ] `func (e rmqError) Error() string`
+
+#### log.go
+- [x] `func (l LogLevel) String() string `
+- [x] `func (lc *LogConfig) String() string `
+
+#### message.go
+- [ ] `func (msg *Message) String() string`
+- [ ] `func goMsgToC(gomsg *Message) *C.struct_CMessage `
+- [ ] `func (msgExt *MessageExt) String() string`
+- [ ] `func (msgExt *MessageExt) GetProperty(key string) string `
+- [ ] `func cmsgExtToGo(cmsg *C.struct_CMessageExt) *MessageExt `
+
+#### producer.go
+- [ ] `func (status SendStatus) String() string `
+- [ ] `func newDefaultProducer(config *ProducerConfig) (*defaultProducer, error)`
+- [ ] `func (p *defaultProducer) String() string `
+- [ ] `func (p *defaultProducer) Start() error `
+- [ ] `func (p *defaultProducer) Shutdown() error `
+- [ ] `func (p *defaultProducer) SendMessageSync(msg *Message) (*SendResult, error)`
+- [ ] `func (p *defaultProducer) SendMessageOrderly(msg *Message, selector MessageQueueSelector, arg interface{}, autoRetryTimes int) (*SendResult, error) `
+- [ ] `func (p *defaultProducer) SendMessageOneway(msg *Message) error `
+
+#### pull_consumer.go
+- [ ] `func (ps PullStatus) String() string `
+- [ ] `func (c *defaultPullConsumer) String() string `
+- [ ] `func NewPullConsumer(config *PullConsumerConfig) (PullConsumer, error) `
+- [ ] `func (c *defaultPullConsumer) Start() error `
+- [ ] `func (c *defaultPullConsumer) Shutdown() error `
+- [ ] `func (c *defaultPullConsumer) FetchSubscriptionMessageQueues(topic string) []MessageQueue `
+- [ ] `func (pr *PullResult) String() string `
+- [ ] `func (c *defaultPullConsumer) Pull(mq MessageQueue, subExpression string, offset int64, maxNums int) PullResult `
+
+#### push_consumer.go
+- [ ] `func (status ConsumeStatus) String() string `
+- [ ] `func (c *defaultPushConsumer) String() string `
+- [ ] `func newPushConsumer(config *PushConsumerConfig) (PushConsumer, error) `
+- [ ] `func (c *defaultPushConsumer) Start() error `
+- [ ] `func (c *defaultPushConsumer) Shutdown() error `
+- [ ] `func (c *defaultPushConsumer) Subscribe(topic, expression string, consumeFunc func(msg *MessageExt) ConsumeStatus) error `
+
+#### queue_selector.go
+- [ ] `func (q *MessageQueue) String() string `
+- [ ] `func queueSelectorCallback(size int, selectorKey unsafe.Pointer) int `
+- [x] `func (w *messageQueueSelectorWrapper) Select(size int) int`
+- [x] `func (s *selectorHolder) put(selector *messageQueueSelectorWrapper) (key int) `
+- [x] `func (s *selectorHolder) getAndDelete(key int) (*messageQueueSelectorWrapper, bool) `
+
+## Integration Test
+### Producer
+- send message with `DelayTimeLevel`
+- send message with `tag`
+- send message orderly with `tag`
+
+### Consumer
+- consume message delayed through push/pull
+- subscribe topic with expression 
+- pull message with expression
\ No newline at end of file
