Skip to content

Latest commit

 

History

History
65 lines (49 loc) · 3.45 KB

5_testing.md

File metadata and controls

65 lines (49 loc) · 3.45 KB

Тест зохиох

Програмаас хүлээх эцсийн үр дүнгээр тест зохиох нь програм хангамжийн чанарыг бататгах сайн аргуудын нэг юм. Тухайлбал туршлагатай хөгжүүлэгч тестээ эхэлж бичээд дараа нь тухайн тестийг давуулахын тулд төвлөрөх замаар програмын дотоод дизайн, хөгжүүлэлтийг хийдэг. Энэ нь нэг талаар програмын чанарыг сайжруулах ба нөгөө талаар хөгжүүлэгчдэд юу хамгийн чухал вэ гэдэгт төвлөрөх боломжийг олгодог. Энэ аргыг ихэвчлэн чанарын шаардлага маш өндөр байх програм хангамжуудад хэрэглэдэг. Ер нь програмын чухал хэсгүүдэд зориулж тест зохиох нь хөгжүүлэгч хүний чухал дадал зуршлуудын нэг юм.

Go хэлэнд тест зохиоход туслах testing нэртэй сан бий. Жишээ болгон тоонуудын дунджийг тооцоолох Average() функцийг турших тест зохиоё.

package math
import "testing"

func TestAverage(t *testing.T) {
    var v float64
    v = Average([]float64{1, 2})
    if v != 1.5 {
        t.Error("Хүлээх үр дүн 1.5, Бодит үр дүн ", v)
    }
}

Тестийг ажиллуулахдаа дараах командыг өгнө:

$ go test
PASS
ok      go-book/math      0.032s

go test команд нь тухайн хавтаснаас тест файлуудыг хайж олоод ажиллуулдаг. Тест файл нь шалгагдах гэж буй сантай нэг хавтас дотор байрлах ба _test.go төгсгөлтэй байх ёстой. Мөн тест файл нь дотроо “Test” гэж эхэлсэн *testing.T төрлийн параметртэй функцүүд агуулна. Жишээ нь TestAverage(t *testing.T) байдалтай бичигдэнэ.

Дээрх жишээний TestAverage() нэртэй тест функц нь [1, 2] тоонуудын дундаж 1.5 байх ёстой гэдгийг шалгаад тэнцэхгүй бол алдааг мэдээлж байна.

Тестийн өгөгдөл нь аль болох олон хувилбартай байвал сайн тест болно. Тиймээс олон хувилбартай оролтын утгуудыг тестэд ашиглах хэрэгтэй. Үүний тулд тестийн өгөгдлийн массив үүсгэж тестэд ашиглаж болно:

package math
import "testing"

type testpair struct {
    values []float64
    average float64
}

// тестийн оролт болон гаралтын утгууд
var tests = []testpair{
    { []float64{1,2}, 1.5 },
    { []float64{1,1,1,1,1,1}, 1 },
    { []float64{-1,1}, 0 },
}

func TestAverage(t *testing.T) {
    for _, pair := range tests {
        v := Average(pair.values)
        if v != pair.average {
            t.Error(
                "Оролт & Гаралт", pair.values,
                "Хүлээх үр дүн", pair.average,
                "Бодит үр дүн", v,
            )
        }
    }
}