Go中的測試之單元測試

2021-08-30 02:01:40 字數 4461 閱讀 7249

單元測試時用來測試包或者程式的一部分**或者一組**的函式。

在go語言中,其單元測試主要包括:基礎測試,其只使用一組引數和結果來測試一段**。表組測試也會測試一段**,但是會使用多組引數和結果進行測試。也可以使用一些方法來模擬測試**需要用到的外部資源,如資料庫或者網路伺服器。這有助於讓測試在沒有所需的外部資源可用的時候,模擬這些資源的行為讓測試正常進行。

}通過執行命令 go test -v 來執行這個測試(-v 提供冗餘輸出)

測試檔案要以 _test.go 命名結束,這主要是go語言的測試工具只會認以 _test.go 結尾的檔案是測試檔案。

如果測試可以接受一組不同的輸入並產生不同的輸出**,那麼應該使用表組測試的方法進行測試。表組測試除了會有一組不同的輸入值和期望結果之外,其餘部分都很像基礎單元測試。

}}有些程式的測試可能需要連線網際網路,才能保證測試執行成功。不能總是假設執行測試的機器可以訪問網際網路,如果突然斷網,則必定影響到測試的進度。

為了解決這個問題,go 的標準庫中包含乙個名為 httptest 的包,它讓開發人員可以模仿基於http 網路呼叫。模仿( mocking) 是乙個很常用的技術手段,用來在測試時模擬訪問不可用的資源。

// feed 模仿了我們期望接收的 xml 文件

var feed =

`<?xml version="1.0" encoding="utf-8"?>

going go programming

golang :

sun, 15 mar 2015 15:04:00 +0000

object oriented programming mechanics

go is an object oriented language.

2015/03/object-oriented

`// mockserver 返回用來處理請求的伺服器的指標

}服務端點是指與服務宿主資訊無關,用來分辨某個服務的位址,一般是不包含宿主的乙個路徑。如果在構造網路api,你會希望直接測試自己的服務的所有服務端點,而不用啟動整個網路服務。包 httptest 正好提供了做到這一點的機制。

}}從上面**可知, http.newrequest() 函式建立了乙個 http.request 值。這個 request 值使用 get 方法呼叫 /sendjson 服務端點的相應。由於這個呼叫使用的是 get 方法,第三個傳送資料的引數被傳為 nil。

httptest.newrecoder 函式建立了乙個 http.responserecorder 值。有了http.request 和 http.responserecorder 這兩個值,就可以呼叫服務預設的多路選擇器(mux)的 servehttp 方法。呼叫這個方法模仿了外部客戶端對 /sendjson 服務端點的請求。

go單元測試

go本身提供了一套輕量級的測試框架。mytest工程下有兩個檔案 main.go package main func main func add a,b int intmain test.go package main import testing func testadd1 t testing.t...

Go單元測試

對包含網路請求和響應的函式進行單元測試需要我們模擬客戶端請求和服務端返回。以乙個登入模組為例,main.go檔案如下 其中的重點是利用 http.newrequest構造乙個虛擬的http get請求,再用httptest.newrecorder 建立http.responesewriter,模擬真...

Go單元測試

go單元測試 1.使用testing框架 1.1.go test 如果執行正確,無日誌.錯誤時,會輸出日誌 1.2.go test v 執行正確或錯誤都會輸出日誌 1.3.當出現錯誤時,可以使用t.fatalf 來格式化輸出錯誤資訊,並退出日誌 1.4.t.logf 方法可以輸出相應的日誌 1.5....