import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestNewPerson(t *testing.T) {
firstName := "Barack"
lastName := "Obama"
birthYear := 1990
p, err := NewPerson(firstName, lastName, birthYear)
assert.Equal(t, err, nil, "Should not return error.")
assert.Equal(t, p.FirstName, firstName, "First name came wrong.")
assert.Equal(t, p.LastName, lastName, "Last name came wrong.")
assert.Equal(t, p.BirthYear, birthYear, "Birth year name came wrong.")
}
func TestFullName(t *testing.T) {
tests := []struct{
firstName string
lastName string
fullName string
}{
{"Hello", "World", "Hello World",},
{"Barack", "Hussein Obama ", "Barack Hussein Obama",},
}
for _, obj := range tests {
p, _ := NewPerson(obj.firstName, obj.lastName, 1990)
assert.Equal(t, obj.fullName, p.FullName())
}
}
这很好用。但是当我写了很多测试时会发生什么,然后我需要在" NewPerson"构造函数,因为我已经在结构中添加了一个新属性?
然后我必须更改对构造函数的调用的所有参数。
对此有什么解决方案?我应该找一种抽象的方法吗?
答案 0 :(得分:3)
使用command go fmt
处理 (未经测试)的那种重构。
请参阅“Refactoring with go fmt
”:
gofmt
使用模式来识别对代码所做的更改。模式在表达式的前半部分建立,然后是“->
”,然后由表达式的后半部分使用。使用标记
-d
代替-w
来检查gofmt
在运行之前将执行的操作。
gofmt -r "yourConstructor(x,y) -> yourConstructor(x, y, z)" -d ./
仅当您指定的模式是有效go expression时才有效,如this answer中所述。