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
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
    }
}<br> 

运行结果:

 

 

 

自己设计的符合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 
}
复制代码

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 + 被测试函数名

 

posted @   woodx  阅读(802)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示