亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何編寫干凈的集成測試

如何編寫干凈的集成測試

Go
呼喚遠方 2023-07-26 13:15:40
我想使用 Go 和 MySQL 編寫集成測試。但我很困惑如何做到這一點。我有 4 個函數:創建、獲取、更新和刪除。如果我只有一個測試函數來測試我的所有代碼,這是一種好的做法嗎?例如:func TestCRUD(t *testing.T){    t.Run("success case", func(t *testing.T){         // call create func         // call update func         // call get func         // call delete func    })}如果我有像上面這樣的代碼,我只需一個測試函數來測試我的所有代碼。如果我想添加一個測試用例,我只需添加到TestCRUD()函數中即可。這是一個好的做法嗎?或者我應該為每個 CRUD 函數編寫測試函數?所以我有4個測試函數,每個測試函數也有很多測試用例。如何干凈地編寫集成測試?
查看完整描述

1 回答

?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

如果您考慮可維護性和簡潔的代碼,恕我直言,我建議您在不同的測試中測試每個 CRUD 功能。


關于您關于多個測試用例的問題,我想說一個好的方法是使用 DDT(數據驅動測試或表驅動測試)。就像是:


func Test_create(t *testing.T) {

? ? type args struct {

? ? ? ? // Define here your function arguments

? ? ? ? arg1 string,

? ? ? ? arg2 string,

? ? }

? ? tests := []struct {

? ? ? ? name string

? ? ? ? args args

? ? ? ? want bool // Your possible function output

? ? }{

? ? // TODO: Add test cases.

? ? }

? ? for _, tt := range tests {

? ? ? ? t.Run(tt.name, func(t *testing.T) {

? ? ? ? ? ? if got := create(tt.args.id); got != tt.want {

? ? ? ? ? ? ? ? t.Errorf("create() = %v, want %v", got, tt.want)

? ? ? ? ? ? }

? ? ? ? })

? ? }

}

使用gotests,您可以為您的函數生成干凈且良好的測試。



查看完整回答
反對 回復 2023-07-26
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號