main_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package main
  2. import "testing"
  3. // 测试替身:只提供接口需要的方法,不依赖真实 Student 或 Teacher。
  4. type fakeIntroducer struct {
  5. text string
  6. }
  7. func (fake fakeIntroducer) Introduce() string {
  8. return fake.text
  9. }
  10. func TestIntroduction(t *testing.T) {
  11. fake := fakeIntroducer{text: "固定测试内容"}
  12. got := introduction(fake)
  13. if got != fake.text {
  14. t.Fatalf("实际=%q,期望=%q", got, fake.text)
  15. }
  16. }
  17. func TestImplementations(t *testing.T) {
  18. tests := []struct {
  19. name string
  20. person Introducer
  21. want string
  22. }{
  23. {name: "student", person: Student{Name: "小朱"}, want: "我是学生:小朱"},
  24. {name: "teacher", person: Teacher{Name: "王老师", Subject: "Go"}, want: "我是老师:王老师,教授Go"},
  25. {name: "assistant", person: &Assistant{Name: "小陈"}, want: "我是助教:小陈"},
  26. }
  27. for _, tt := range tests {
  28. t.Run(tt.name, func(t *testing.T) {
  29. if got := introduction(tt.person); got != tt.want {
  30. t.Errorf("实际=%q,期望=%q", got, tt.want)
  31. }
  32. })
  33. }
  34. }
  35. func TestInterfaceNil(t *testing.T) {
  36. var empty Introducer
  37. if empty != nil {
  38. t.Fatal("未赋值接口应为 nil")
  39. }
  40. var assistant *Assistant
  41. var person Introducer = assistant
  42. if person == nil {
  43. t.Fatal("包含具体类型的 nil 指针接口不应等于 nil")
  44. }
  45. if got := person.Introduce(); got != "助教信息为空" {
  46. t.Errorf("nil 助教的介绍不符合预期:%q", got)
  47. }
  48. }