项目地址:https://github.com/gone-io/gone
原文地址:https://github.com/gone-io/gone/blob/main/docs/goner-unit-test-example.md
文章目录
引言
在上一篇文章《如何基于Gone编写一个Goner对接Apollo配置中心(上)—— 实现统一管理配置和监控配置变化》中,我们详细介绍了如何在Gone框架中实现一个Apollo配置中心组件。然而,仅仅实现功能是不够的,为了确保组件的可靠性和稳定性,我们必须为其编写充分的单元测试。本文以Apollo组件为例,深入探讨如何在Gone框架中构建高质量的单元测试,帮助开发者打造更健壮的组件。
编写“可测试”的代码
正如我在另一篇文章《如何对Golang代码进行单元测试?》中提到的,编写单元测试的前提是编写“可测试”的代码,并采用设计可测试代码的实践方法。以以下代码为例,我们需要思考:
- 需要测试哪些部分?
- 如何对这些部分进行测试?
func (s *apolloClient) Init() {
s.localConfigure = viper.New(s.testFlag)
m := map[string]*tuple{
"apollo.appId": {
v: &s.appId, defaultVal: ""},
"apollo.cluster": {
v: &s.cluster, defaultVal: "default"},
"apollo.ip": {
v: &s.ip, defaultVal: ""},
"apollo.namespace": {
v: &s.namespace, defaultVal: "application"},
"apollo.secret": {
v: &s.secret, defaultVal: ""},
"apollo.isBackupConfig": {
v: &s.isBackupConfig, defaultVal: "true"},
"apollo.watch": {
v: &s.watch, defaultVal: "false"},
"apollo.useLocalConfIfKeyNotExist": {
v: &s.useLocalConfIfKeyNotExist, defaultVal: "true"},
}
for k, t := range m {
err := s.localConfigure.Get(k, t.v, t.defaultVal)
if err != nil {
panic(err)
}
}
c := &config.AppConfig{
AppID: s.appId,
Cluster: s.cluster,
IP: s.ip,
NamespaceName: s.namespace,
IsBackupConfig: s.isBackupConfig,
Secret: s.secret,
}
client, err := agollo.StartWithConfig(func() (*config.AppConfig, error) {
return c, nil
})
if err != nil {
panic(err)
}
s.apolloClient = client
if s.watch {

最低0.47元/天 解锁文章
1111





