| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package main
- import (
- "bytes"
- "errors"
- "flag"
- "io"
- "strings"
- "testing"
- )
- func TestRunArguments(t *testing.T) {
- var output bytes.Buffer
- err := run([]string{"-name", "小朱", "-minutes", "30"}, strings.NewReader(""), &output)
- if err != nil {
- t.Fatalf("运行失败:%v", err)
- }
- want := "学习者:小朱,学习时长:30 分钟\n"
- if output.String() != want {
- t.Errorf("输出=%q,期望=%q", output.String(), want)
- }
- }
- func TestRunInteractive(t *testing.T) {
- var output bytes.Buffer
- err := run([]string{"-interactive"}, strings.NewReader("小朱\n45\n"), &output)
- if err != nil {
- t.Fatalf("交互失败:%v", err)
- }
- want := "请输入姓名:请输入学习分钟数:学习者:小朱,学习时长:45 分钟\n"
- if output.String() != want {
- t.Errorf("输出=%q,期望=%q", output.String(), want)
- }
- }
- func TestRunErrors(t *testing.T) {
- tests := []struct {
- name string
- args []string
- input string
- }{
- {name: "missing_name", args: []string{"-minutes", "30"}},
- {name: "empty_name", args: []string{"-name", " ", "-minutes", "30"}},
- {name: "zero", args: []string{"-name", "小朱", "-minutes", "0"}},
- {name: "too_large", args: []string{"-name", "小朱", "-minutes", "1441"}},
- {name: "invalid_flag", args: []string{"-unknown"}},
- {name: "invalid_number", args: []string{"-name", "小朱", "-minutes", "abc"}},
- {name: "positional", args: []string{"extra"}},
- {name: "mixed", args: []string{"-interactive", "-minutes", "0"}},
- {name: "missing_input", args: []string{"-interactive"}, input: "小朱\n"},
- {name: "invalid_input", args: []string{"-interactive"}, input: "小朱\nabc\n"},
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if err := run(tt.args, strings.NewReader(tt.input), io.Discard); err == nil {
- t.Fatal("预期返回错误,实际没有错误")
- }
- })
- }
- }
- func TestRunBounds(t *testing.T) {
- for _, minutes := range []string{"1", "1440"} {
- t.Run(minutes, func(t *testing.T) {
- err := run([]string{"-name", "小朱", "-minutes", minutes}, strings.NewReader(""), io.Discard)
- if err != nil {
- t.Fatalf("边界值应当有效:%v", err)
- }
- })
- }
- }
- func TestRunHelp(t *testing.T) {
- var output bytes.Buffer
- err := run([]string{"-h"}, strings.NewReader(""), &output)
- if !errors.Is(err, flag.ErrHelp) {
- t.Fatalf("期望帮助标记,实际错误:%v", err)
- }
- if !strings.Contains(output.String(), "-interactive") {
- t.Errorf("帮助信息未包含参数说明:%q", output.String())
- }
- }
|