go单元测试简单题目

go语言的单元测试

  • 对go的序列化,反序列化操作;
  • 把内容写入文件,对文件进行读取;
  • 通过单元测试检测正误。

monster文件 对结构体进行上述操作

package monster //只要不起主包名皆可
import (
	"encoding/json"
	"io/ioutil"
	"fmt"
)

type Monster struct {
	Name string
	Age int
	Skill string
}

//给Monster绑定方法Store,将Monster变量(对象),序列化后保存到文件中
func(this *Monster) Store() bool {
	//先序列化
	data,err := json.Marshal(this)
	if err != nil {
		fmt.Println("marshal err =",err)
		return false
	}

	//保存到文件
	filePath := "e:/abc.txt"
	err = ioutil.WriteFile(filePath,data,0666)
	if err != nil {
		fmt.Println("write file err =",err)
		return false
	}
	return true
}

//给Monster绑定方法ReStore,将一个序列化的Monster,从文件中读取,并反序列化为Monster结构体
func(this *Monster) ReStore() bool {
	//1.先从文件中,读取序列化的字符串
	filePath := "e:/abc.txt"
	data,err := ioutil.ReadFile(filePath)
	if err != nil {
		fmt.Println("ReadFile err=",err)
		return false
	}

	//2.反序列化
	err = json.Unmarshal(data,this)
	if err != nil {
		fmt.Println("Unmarshal err=",err)
		return false
	}
	return true
}

测试文件 monster_test.go

package monster
import (
	"testing"
)

//测试用例,测试Store方法
func TestStore(t *testing.T) {
	//先创建一个Monster实例
	monster := &Monster{// monster文件里的方法绑定的是结构体的指针,这里创建实例时,可以使用&进行指针调用。
		Name:"孙悟空",
		Age:1000,
		Skill:"七十二变",
	}
	res := monster.Store()
	if !res {
		t.Fatalf("monster.Store() 错误,希望为=%v,实际为=%v",true,res)
	}
	t.Logf("monster.Store() 测试成功")
}

func TestReStore(t *testing.T) {

	//先创建一个 Monster 实例,不需要指定字段的值
	var monster = &Monster{}
	res := monster.ReStore()
	if !res {
		t.Fatalf("monster.ReStore() 错误,希望为=%v,实际为=%v",true,res)
	}
	if monster.Name != "孙悟空" {
		t.Fatalf("monster.ReStore() 错误,希望为=%v,实际为=%v","孙悟空",res)
	}
	t.Logf("monster.ReStore() 测试成功")
}

测试结果:
在这里插入图片描述
总结:通过这个简单的代码,对前面所学知识进行了简单应用。对于这些包里的函数使用需要熟练掌握。【encoding/json包里的json.Marshal()和json.Unmarshal()】
对于文件的读写操作在前面笔记中也有记录,需要及时复习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值