Go語言-單元測試

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

今天閑來無事看了下GO語言,首先是看了酷殼耗子大牛的文章,然後下載安裝,配置環境等等,由於我下載的是安裝版,所以環境變數什麼的不用自己配置。然後又剛好去圖書館借了兩本書:《Go語言編程》許式偉/呂桂華編著,《Go語言 雲動力》樊虹編著,接著就開始看。。

好了,廢話不多說,直接進入主題:

在《Go語言編程》我看到他有一些例子,在書的第二章最後,講的是兩種排序的Go語言實現(快速排序和冒泡排序)本文的原始碼來自《Go語言編程》許式偉/呂桂華編著

排序本身不重要,因為之前用C,java也實現過,重要的是練練寫Go語言,熟悉下文法。

環境:

我設定的GOPATH為:G:\go

然後所有檔案及目錄如下:

主程式(sorter.go):G:\go\src

排序演算法(bubblesort.go、qsort.go):G:\go\src\mysort       (注意,這裡不能取名為sort否則後面執行 go install的時候會出錯)

測試類別(bubblesort_test.go、qsort_test.go):G:\src\sort_test (注意,測試類別必須以_test.go結尾,之前在_test.go結尾的檔案中編寫了main函數,然後果斷編譯出錯)

原始碼:

soter.go

package mainimport("flag""fmt""bufio""io""os""strconv""time""mysort")var infile *string = flag.String("i","infile","File contains values for sorting")var outfile *string = flag.String("o","outfile","File to receive sorted values")var algorithm *string = flag.String("a","qsort","Sort algorithm")func readValues(infile string)(values []int,err error){file,err := os.Open(infile)if err != nil{fmt.Println("Failed to open the input file",infile)return}defer file.Close()br := bufio.NewReader(file)values = make([]int,0)for{line,isPrefix,err1 := br.ReadLine()if err1 != nil{if err1 != io.EOF{err = err1}break}if isPrefix {fmt.Println("A too long line seems unexpected.")return}str := string(line)value,err1 := strconv.Atoi(str)if err1 != nil{err = err1return}values = append(values,value)}return}func writeValues(values []int,outfile string) error{file,err := os.Create(outfile)if err != nil{fmt.Println("Failed to create the output file ",outfile)return err}defer file.Close()for _,value := range values{str := strconv.Itoa(value)file.WriteString(str + "\n")}return nil}func main(){flag.Parse()if infile != nil{fmt.Println("infile = ",*infile,"outfile = ",*outfile,"algorithm = ",*algorithm)}values,err := readValues(*infile)if err == nil{t1 := time.Now()switch *algorithm{case "qsort":mysort.QuickSort(values)case "bubblesort":mysort.BubbleSort(values)default:fmt.Println("Sorting algorithm",*algorithm,"is either unknown or unsupported.")}t2 := time.Now()fmt.Println("The sorting process costs",t2.Sub(t1),"to complete")writeValues(values,*outfile)}else{fmt.Println(err)}}

排序演算法:

bubblesort.go

package mysortfunc BubbleSort(values []int){flag := truefor i:=0;i < len(values)-1;i++{flag = truefor j:=0;j<len(values)-i-1;j++{if values[j] > values[j+1]{values[j],values[j + 1] = values[j + 1],values[j]flag = false}// end if}//end for j=...if flag == true{break}}// end for i=...}

qsort.go

package mysortfunc quickSort(values []int,left,right int){temp:=values[left]p := lefti,j:=left,rightfor i <= j{for j>=p && values[j] >= temp{j--}if(j >= p){values[p] = values[j]p = j}if values[i] <= temp && i <= p{i++}if i<=p {values[p] = values[i]p = i}}values[p] = tempif p-left > 1{quickSort(values,left,p-1)}if right-p > 1{quickSort(values,p+1,right)}}func QuickSort(values []int){quickSort(values,0,len(values)-1)}


測試類別:

bubblesort_test.go

package sort_testimport ("mysort""testing")func TestBubbleSort1(t *testing.T){values := []int{5,4,3,2,1}mysort.BubbleSort(values)if values[0] != 1 || values[1] != 2 || values[2] != 3||values[3] != 4 || values[4] != 5{t.Error("BubbleSort() failed , Got",values,"Excepted 1 2 3 4 5")}}func TestBubbleSort2(t *testing.T){values := []int{5,5,3,2,1}mysort.BubbleSort(values)if values[0] != 1 || values[1] != 2 || values[2] != 3||values[3] != 5 || values[4] != 5{t.Error("BubbleSort() failed , Got",values,"Excepted 1 2 3 5 5")}}func TestBubbleSort3(t *testing.T){values := []int{5}mysort.BubbleSort(values)if values[0] != 5{t.Error("BubbleSort() failed , Got",values,"Excepted 5")}}


qsort_test.go
package sort_testimport("mysort""testing")func TestQuickSort1(t *testing.T){values:=[]int{5,4,3,2,1}mysort.QuickSort(values)if values[0] != 1 || values[1] != 2 || values[2] != 3||values[3] != 4 || values[4] != 5{t.Error("QuickSort() failed , Got",values,"Excepted 1 2 3 4 5")}}func TestQuickSort2(t *testing.T){values := []int{5,5,3,2,1}mysort.QuickSort(values)if values[0] != 1 || values[1] != 2 || values[2] != 3||values[3] != 5 || values[4] != 5{t.Error("QuickSort() failed , Got",values,"Excepted 1 2 3 5 5")}}func TestQuickSort3(t *testing.T){values := []int{5}mysort.QuickSort(values)if values[0] != 5{t.Error("QuickSort() failed , Got",values,"Excepted 5")}}

運行:首先是測試(以快速排序為例)

進入到G:\go\src\sort_test 目錄下

>cd /d G:\go\src\sort_test
>go install

>go build qsort_test.go

>go test qsort_test.go

如果代碼和GOPATH設定沒問題,那麼就會顯示OK

然後是運行主程式,在這之前,現在src目錄下建立一個檔案“unsorted.dat”,用記事本開啟然後輸入

123
3046
3
64
490
1
23
5331
2
7
4
2
132

儲存,接下來:

進入:G:\go\src下

>cd G:\go\src

>go build

然後會在src目錄下產生一個sorter.exe

命令列輸入(G:\go\src下):

sorter.exe -i unsorted.dat -o sorted.dat -a qsort(如果你是想運行冒泡排序這一行命令的最後一個單詞改為:bubblesort)

如果代碼和GOPATH配置沒有問題,那麼會在src目錄下產生一個sorted.dat,用記事本開啟可以發現一面的內容已經是排好序的


好,操作到此為止--------------------------------------------------------------------------------------------------------


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.