| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package main
- import "testing"
- // 测试替身:只提供接口需要的方法,不依赖真实 Student 或 Teacher。
- type fakeIntroducer struct {
- text string
- }
- func (fake fakeIntroducer) Introduce() string {
- return fake.text
- }
- func TestIntroduction(t *testing.T) {
- fake := fakeIntroducer{text: "固定测试内容"}
- got := introduction(fake)
- if got != fake.text {
- t.Fatalf("实际=%q,期望=%q", got, fake.text)
- }
- }
- func TestImplementations(t *testing.T) {
- tests := []struct {
- name string
- person Introducer
- want string
- }{
- {name: "student", person: Student{Name: "小朱"}, want: "我是学生:小朱"},
- {name: "teacher", person: Teacher{Name: "王老师", Subject: "Go"}, want: "我是老师:王老师,教授Go"},
- {name: "assistant", person: &Assistant{Name: "小陈"}, want: "我是助教:小陈"},
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if got := introduction(tt.person); got != tt.want {
- t.Errorf("实际=%q,期望=%q", got, tt.want)
- }
- })
- }
- }
- func TestInterfaceNil(t *testing.T) {
- var empty Introducer
- if empty != nil {
- t.Fatal("未赋值接口应为 nil")
- }
- var assistant *Assistant
- var person Introducer = assistant
- if person == nil {
- t.Fatal("包含具体类型的 nil 指针接口不应等于 nil")
- }
- if got := person.Introduce(); got != "助教信息为空" {
- t.Errorf("nil 助教的介绍不符合预期:%q", got)
- }
- }
|