测试多次调用构造函数的位置?

时间:2014-12-29 20:04:46

标签: go tdd

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"构造函数,因为我已经在结构中添加了一个新属性?

然后我必须更改对构造函数的调用的所有参数。

对此有什么解决方案?我应该找一种抽象的方法吗?

1 个答案:

答案 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中所述。