package mymath
func Sum(nums ...int) int {
total := 0
for _, num := range nums {
total += num
}
return total
}
func Div(a, b float64) (float64, error) {
return a / b, nil
}
func StrRept(s string, count int) string {
b := make([]byte, len(s)*count)
bp := copy(b, s)
for bp < len(b) {
copy(b[bp:], b[bp:])
bp *= 2
}
return string(b)
}
✘ ⚙ yundream@yundream ~/workstation/tdd/function/mymath go test -v
=== RUN Test_Sum
--- FAIL: Test_Sum (0.00s)
math_test.go:16:
Error Trace: math_test.go:16
Error: Not equal:
expected: 6
actual : 11
Test: Test_Sum
Messages: They shuould be equal
=== RUN Test_Div
--- FAIL: Test_Div (0.00s)
math_test.go:24:
Error Trace: math_test.go:24
Error: Expected value not to be nil.
Test: Test_Div
Messages: Devided zero
math_test.go:26: Divide Zero
FAIL
exit status 1
FAIL github.com/yundream/tddtest/mymath 0.003s
Assert 패키지
테스트를 체계적으로 하기 위해서 asserting 툴들을 사용한다. 위 코드는 아래와 같이 수정 할 수 있다.
TDD를 하는 이유
품질의 일관성
테스트를 하지 않으면
테스트는 자주 해야 한다.
개발에 집중
테스트할 수 있는 코드는 좋은 코드다.
단위 별 테스트 & 통합
Go 언어와 TDD
C++과 Go 언어의 차이
Simple example
. ├── go.mod └── mymath ├── math.go └── math_test.gopackage mymath func Sum(nums ...int) int { total := 0 for _, num := range nums { total += num } return total } func Div(a, b float64) (float64, error) { return a / b, nil } func StrRept(s string, count int) string { b := make([]byte, len(s)*count) bp := copy(b, s) for bp < len(b) { copy(b[bp:], b[bp:]) bp *= 2 } return string(b) }package mymath import ( "testing" ) func Test_Sum(t *testing.T) { v0 := Sum(1, 2, 3) if v0 != 6 { t.Fatal("1+2+3=6 but ", v0) } v1 := Sum(6, 5) if v1 != 11 { t.Fatal("6+5=11 but ", v1) } } func Test_Div(t *testing.T) { v2, err := Div(0, 2) if err == nil { t.Fatal("Divide Zero") } t.Log("0/2=", v2) }✘ ⚙ yundream@yundream ~/workstation/tdd/function/mymath go test -v === RUN Test_Sum --- FAIL: Test_Sum (0.00s) math_test.go:16: Error Trace: math_test.go:16 Error: Not equal: expected: 6 actual : 11 Test: Test_Sum Messages: They shuould be equal === RUN Test_Div --- FAIL: Test_Div (0.00s) math_test.go:24: Error Trace: math_test.go:24 Error: Expected value not to be nil. Test: Test_Div Messages: Devided zero math_test.go:26: Divide Zero FAIL exit status 1 FAIL github.com/yundream/tddtest/mymath 0.003sAssert 패키지
package mymath import ( "github.com/stretchr/testify/assert" "testing" ) func Test_Sum(t *testing.T) { v0 := Sum(1, 2, 3) assert.Equal(t, 6, v0, "They shuould be equal") if v0 != 6 { t.Fatal("1+2+3=6 but ", v0) } v1 := Sum(6, 5) assert.Equal(t, 6, v1, "They shuould be equal") if v1 != 11 { t.Fatal("6+5=11 but ", v1) } } func Test_Div(t *testing.T) { v2, err := Div(0, 2) assert.NotNil(t, err, "Devided zero") if err == nil { t.Fatal("Divide Zero") } t.Log("0/2=", v2) }HTTP API 테스트
- 목업을 이용 할 것인가 ?
- 서버 & 클라이언트 쌍을 구축 할 것인가 ?
- 통합된 테스트 툴이 있나 ?
GoLang은 통합된(커버리지 측정이 가능한) 테스트 툴을 제공한다.CICD
CICD와 TDD의 통합
Recent Posts
Archive Posts
Tags