今天有人发帖问,如果以后不在腾讯做程序员了想干嘛。

就让我用一个规范的单测来回答这个问题吧:

// MySelf 我自己
type MySelf struct {
	WantToDo []string
}

// Career 职业
type Career struct {
	Desc string
}

// WhatMyCareerWillBe 我未来会干嘛
func WhatMyCareerWillBe(myself MySelf) Career {
	return BeingATencentProgrammer(myself)
}

// BeingATencentProgrammer 在腾讯做程序员
func BeingATencentProgrammer(myself MySelf) Career {
	fmt.Printf("我以后想:%+v", myself.WantToDo)
	return Career{
		Desc: "每天两点一线写代码",
	}
}

// TestWhatMyCareerWillBe 测试WhatMyCareerWillBe
func TestWhatMyCareerWillBe(t *testing.T) {
	// 准备测试数据
	whatIWantToDoFirst := "开台球厅+自带经营烤冷面、手抓饼、陕西凉皮、长春炒粉、鸡汤豆腐串+酸菜烤牛肉小酒馆"
	whatIWantToDoSec := "软件工程各类计算机语言编程培训辅导老师"
	myself := MySelf{
		WantToDo: []string{whatIWantToDoFirst, whatIWantToDoSec},
	}
	// Stub BeingATencentProgrammer
	gomonkey.ApplyFunc(
		BeingATencentProgrammer,
		func(_ MySelf) Career {
			return Career{
				Desc: myself.WantToDo[rand.Intn(len(myself.WantToDo))],
			}
		})
	// 执行待测方法
	myCareer := WhatMyCareerWillBe(myself)
	// 断言
	assert := assert.New(t)
	assert.True(myCareer.Desc == whatIWantToDoFirst || myCareer.Desc == whatIWantToDoSec)
}

短短一文,包含了单测的几个标准步骤:

1. 准备数据

2. Mock/Stub/Expect的组合

3. 执行待测方法

4. 断言