Я получил пример от @volker о тесте, управляемом таблицей, как показано ниже
Но в настоящее время мне не хватает того, что я должен поставить в реальном тесте, в этом тесте используется байт, в настоящее время я не уверен, что вставить в args и expected []byte,
например Я хочу проверить, что в файле есть запись 2 new line, а затем запись application, как я могу это сделать без необходимости создавать настоящий файл и анализировать его?
type Models struct {
name string
vtype string
contentType string
}
func setFile(file io.Writer, appStr Models) {
fmt.Fprint(file, "1.0")
fmt.Fprint(file, "Created-By: application generation process")
for _, mod := range appStr.Modules {
fmt.Fprint(file, "\n")
fmt.Fprint(file, "\n")
fmt.Fprint(file, appStr.vtype) //"userApp"
fmt.Fprint(file, "\n")
fmt.Fprint(file, appStr.name) //"applicationValue"
fmt.Fprint(file, "\n")
fmt.Fprint(file, appStr.contentType)//"ContentType"
}
}
func Test_setFile(t *testing.T) {
type args struct {
appStr models.App
}
var tests []struct {
name string
args args
expected []byte
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := &bytes.Buffer{}
setFile(b, tt.args.AppStr)
if !bytes.Equal(b.Bytes(), tt.expected) {
t.Error("somewhat bad happen")
}
})
}
}
Я прочитал и понял следующий пример, но не для байта и файла https://medium.com/@virup/how-to-write-concise-tests-table-driven-tests-ed672c502ae4
@Gavin - Спасибо, не могли бы вы дать это в качестве ответа?
@Gavin - вы имеете в виду что-то вроде `var tests [] struct {name string args args expected [] byte} {[] byte (fmt.Sprintf ("% s% s% s ", NEW_LINE, NEW_LINE," Application ") )} `





Если вы проверяете только статическое содержимое вначале, то вам действительно нужен только один тест. Это выглядело бы примерно так:
func Test_setFile(t *testing.T) {
type args struct {
appStr models.App
}
var tests []struct {
name string
args args
expected []byte
}{
name: 'Test Static Content',
args: args{appStr: 'Some String'},
expected: []byte(fmt.Sprintf("%s%s%s", NEW_LINE, NEW_LINE, "Application")),
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := &bytes.Buffer{}
setFile(b, tt.args.AppStr)
if !bytes.Equal(b.Bytes(), tt.expected) {
t.Error("somewhat bad happen")
}
})
}
}
Хотя, поскольку у вас есть только один случай для этого теста, здесь действительно нет необходимости использовать тесты, управляемые таблицами. Вы можете очистить его, чтобы он выглядел примерно так:
func Test_setFile(t *testing.T) {
b := &bytes.Buffer{}
setFile(b, 'Some String')
want := []byte(fmt.Sprintf("%s%s%s", NEW_LINE, NEW_LINE, "Application"))
got := b.Bytes()
if !bytes.Equal(want, got) {
t.Errorf("want: %s got: %s", want, got)
}
}
Если вы проверяете только контент, который не изменится в зависимости от ввода, вам действительно нужен только один тест. Ожидается, что это будет
[]byte(fmt.Sprintf("%s%s%s", NEW_LINE, NEW_LINE, "Application")).