Go語言:TTD(測試驅動開發)


學習參考網站:

學習Go迭代

https://studygolang.gitbook.io/learn-go-with-tests/go-ji-chu/iteration

for i:=0; i < length; i++ { // 注意不能使用++i

   // code 

}

 

學習Go數組與切片

https://studygolang.gitbook.io/learn-go-with-tests/go-ji-chu/arrays-and-slices

數組允許你以特定的順序在變量中儲存相同類型的多個元素

數組是值類型,而且申請的時候要明確數組的長度

var newArray = [intNum] int {初始化變量}

 

切片可以允許你申請不定長度的數組,而且它們是引用類型

var newArray = [] int {初始化變量}

 

課程要求

參考:《Learn Go with tests》
作業2:完成該教程“迭代”章節的練習,理解TDD、重構、測試、基准測試等概念。自己選擇一個算法如“快排”,模仿教程內容結構,寫一個Go語言某算法實現TDD實踐報告

 

教程迭代的練習:

package iteration

func Repeat(character string, num int) string {
    var repeated string
    for i := 0; i < num; i++ {
        repeated = repeated + character
    }
    return repeated
}package iteration
import "testing"

func TestRepeat(t *testing.T) {
	repeated := Repeat("a", 5)
	expected := "aaaaa"
	
	if repeated != expected {
		t.Errorf("expected '%q' but got '%q'", expected, repeated)
	}

}

func BenchmarkRepeat(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Repeat("a", 5);
	}
}
 

運行結果:

 

 

 

自己設計的符合TDD模式,快排算法

參考:

https://www.runoob.com/w3cnote/quick-sort.html

package quickSort

func adjustArr(arr [] int, findex, lindex int) (int) { // return mid
    
    mid := (int)((findex + lindex) / 2)
    temp1 := arr[findex]
    arr[findex] = arr[mid]
    arr[mid] = temp1
    
    index := findex + 1
    for i:=findex + 1; i <= lindex; i++{
        if (arr[i] < arr[findex]) {
            temp2 := arr[i]
            arr[i] = arr[index]
            arr[index] = temp2
            index++ 
        }
    }
    
    index = index - 1
    
    temp1 = arr[findex]
    arr[findex] = arr[index]
    arr[index] = temp1 
    
    return index
}

func QuickSort(arr [] int, findex, lindex int) () {
    if findex >= lindex {
        return 
    }
    
    mid := adjustArr(arr, findex, lindex)
    QuickSort(arr, findex, mid - 1)
    QuickSort(arr, mid + 1, lindex)
    return 
}

 

package quickSort

import "testing"
import "fmt"

func TestQuickSort(t *testing.T) {
	var arr1 = [] int {3, 2, 1, 6, 7}
	detail_test(arr1, len(arr1), t)
	
	var arr2 = [] int {4,2,1,10,39,234,3,2,1,6,7}
	detail_test(arr2, len(arr2), t)
	
	var arr3 = [] int {4,2,1,10,39,234,3,2,1,6,7,0,52,123,2415,1234,656,253,245,12,3,4,12,51,52,13,1235,1234,656,13}
	detail_test(arr3, len(arr3), t)
}

func detail_test(arr [] int, length int, t *testing.T)() {
	QuickSort(arr, 0, length - 1)
	for i := 0; i < length - 1; i++ {
		fmt.Printf("%d ", arr[i])
		if arr[i] > arr[i + 1] {
			t.Errorf("%d ", arr[i])
		} 	
	}
	
	fmt.Printf("%d \n", arr[length - 1]);
}

 運行結果:

 

 

經驗教訓:

被測試函數 必須以大寫字母開頭

測試函數 Test + 被測試函數名

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM