一、GoConvey 簡介
GoConvey 是一個讓測試更簡單的實時測試反饋框架,它可以讓您的測試更加容易編寫、理解和組織,同時實時反饋讓您在開發過程中節省了很多時間。
GoConvey 在 2013 年首次亮相,作者為 Chris Hines 。GoConvey 提供了一個簡單、直觀和可擴展的方式來編寫測試並將測試結果實時反饋給開發人員。GoConvey 在 Go 語言測試框架中增強了 assertion 清晰度和可組織度,同時也提供了 BDD(行為驅動開發) 的支持。
二、使用 GoConvey
1. 安裝
首先,您需要安裝 GoConvey。在命令行工具中輸入以下指令:
go get github.com/smartystreets/goconvey
2. 編寫測試
GoConvey 基於 Go 的測試框架標準,只需要編寫具有一些 assert 條件的代碼,就可以在 GoConvey 中實時查看測試反饋。在 GoConvey 中,可以運行多個測試類,每個測試類都會顯示在瀏覽器中的左側導航欄中。這裡我們簡單介紹一下 GoConvey 的基本測試方法:
func TestAdd(t *testing.T) {
Convey("Given two numbers", t, func() {
a := 1
b := 2
Convey("When adding the numbers", func() {
result := a + b
Convey("The result should be 3", func() {
So(result, ShouldEqual, 3)
})
})
})
}
這就是 GoConvey 的基本測試方法。使用 Convey 方法編寫了一個測試框架。Convey 的第一個參數是測試的名稱,第二個參數是測試上下文,第三個參數是要執行的功能代碼塊。功能代碼塊中的第一個 Convey 函數表示給出了測試情景的描述(Given)。在這個例子中,它是給定兩個數字。第二個 Convey 表示一個動作的執行(When)。在這裡,這個動作是將這兩個數字加在一起。最後的 Convey 表示對動作的驗證(Then)。在這裡,驗證的結果是兩個數字之和應該是 3。
當然,這只是一個簡單的例子。更複雜的測試需要更多的代碼以實現功能和測試的覆蓋度。但是,GoConvey 提供了更複雜測試的實現方法,包括以下不同的測試類型:
- Convey( “Some full sentence representing functionality”, func() { /*…*/ } )
- Convey( “Some sentence fragment”, b )
- Convey( “Some sentence fragment”, func() { c.So(x, c.ShouldEqual, 42) } )
從這些例子中可以看出,GoConvey 支持靈活的測試形式。基本結構足以處理陳述句和條件句,而這些陳述和條件可以實現複雜的測試。
3. 運行測試
運行測試的命令行如下所示:
goconvey
輸入命令後,會在瀏覽器中打開 GoConvey 的運行頁面。如果運行成功,所有的測試都會自動運行。如果測試失敗,瀏覽器會給出反饋提示,您可以通過這個反饋信息找到錯誤。
4. 配置項
GoConvey 支持幾種配置選項來修改默認行為,具體見以下代碼:
So(true, ShouldBeTrue)
So(false, ShouldBeFalse)
So("Hello, GoConvey!", ShouldNotEqual, "Goodbye, GoConvey!")
這裡的示例代碼展示了三種不同的測試方法。第一個 So 方法測試了真值;第二個方法測試了假值;第三個測試方法比較兩個字元串不相等。每個 So 方法都需要一個測試斷言(ShouldBeTrue、ShouldBeFalse 或 ShouldNotEqual),該斷言將與給定的值進行比較。如果斷言失敗,則測試會失敗。
三、GoConvey 的優勢
1. 實時反饋
GoConvey 可以在測試運行時實時地反饋結果,無需等待測試運行結束。這使得測試編寫、調試和組織變得更加容易。
2. 容易看懂和編寫
GoConvey 的結構基於自然語言的對話框架,使得測試用例變得容易編寫、組織和閱讀。同時,GoConvey 與 Go 的測試框架完全一致,所以您已經多少熟悉了一些基本的測試編寫語法和結構。
3. 支持 BDD
GoConvey 支持 BDD(行為驅動開發),它利用自然語言的模式描述代碼功能和行為。這讓測試更加可讀性、更容易編寫,也讓開發人員、測試人員和客戶之間的協作變得更加容易。
4. 提供高級功能
GoConvey 提供了一些高級功能,如代碼覆蓋率、HTML 報告和可視化比較。這些功能都以後端命令行工具或前端瀏覽器插件的形式提供,在測試開發過程中增加了更多的靈活性和可擴展性。
結語
總之,GoConvey 為 Go 語言的測試框架帶來了一些重要的優勢,這些優勢主要體現在改善測試編寫、組織和運行的方面。總的來說,GoConvey 對於開發人員、測試人員和 QA 團隊都是非常有用的。使用它可以大大節約時間和精力。
完整的代碼示例:
package example
import (
"testing"
. "github.com/smartystreets/goconvey/convey"
)
func TestAdd(t *testing.T) {
Convey("Given two numbers", t, func() {
a := 1
b := 2
Convey("When adding the numbers", func() {
result := a + b
Convey("The result should be 3", func() {
So(result, ShouldEqual, 3)
})
})
})
Convey("Given a string", t, func() {
str := "Hello, GoConvey!"
Convey("When check the string length", func() {
strLen := len(str)
Convey("The length should be 15", func() {
So(strLen, ShouldEqual, 15)
})
})
Convey("When change the string lowercase", func() {
result := strings.ToLower(str)
Convey("The result should be \"hello, goconvey!\"", func() {
So(result, ShouldEqual, "hello, goconvey!")
})
})
})
}
原創文章,作者:ZFVHN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370480.html