ユニットには効果をテスト:機能やパッケージの導入の確認結果は正しいです。
伝統的な方法は:テスト出力の結果と期待される結果は、一貫しているかどうか
に効果的であることが、本番環境では何かを持っている、そのような環境、テスト環境はありません。
管理につながらない、テストフレームワークの必要性は、問題を解決するために。
Golangで軽量テストテストフレームワーク、移動テストテストコマンドをテストし、性能試験装置を実装する(実行コードに時間がかかります)。
ユニットテストによって、次のような問題を解決します:
- 各機能が実行されていることを確認し、その結果が正しく出力されます。
- パフォーマンスを確保するための書き込みコードが良いです
- 論理ユニットテストはエラー、問題の解決策を見つけるために早期のエクスポージャーのプログラムの設計と実装の使用を発見することができます。
- 性能試験は、プログラミング上の多くの問題に焦点を当てた、だけでなく、プログラムが高い同時実行で安定を維持することができます。
使用ユニットテスト
- フォルダを作成して個別に試験し、主に()アイソレーションテストを実行すると、ファイルのmain()エントリを必要としません。
- _test.goファイルを抽出し.GO機能のテストファイルは、テスト_test.goパッケージをインポートする必要があります。
例:
package tst
import "testing"
func Test<dest>(t *testing.T) {
//引入测试函数1
//引入测试函数2
}
ケースシミュレーション:パッケージを作成し、2つの論文、Accumu.goとAccumu_test.go内側に、次のように書かれた二つの文書を書くTST
Accumu.go
//>>> Accumu.go <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
package tst
func Accumu(n int) int { //就是一个累加器,没啥说得,没有main()
res := 0
for i := 0 ; i <= n ; i++ {
res += i
}
return res
}
Accumu_test.go
//>>> Accumu_test.go <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//测试单个文件:切换到此目录下,go test -v会默认测试所有函数,如果只想测试其中一个,需要命令 go test -v Accumu_test.go Accumu.go
//测试单个方法:切换到此目录下,需要命令 go test -v -test.run Accumu
package tst
import (
"testing" //需要导入testing包
)
func TestAccumu(t *testing.T) { //在Goland中,默认test文件都会直接出此类格式
res := Accumu(10) //测试结果与res所传函数有关,与函数名无关
if res != 55 {
t.Fatalf("应输入值为%v,实际输出为%v",55,res) //遇到错误即终止,并会反馈结果为FAIL
}
t.Logf("程序测试正确!") //如果测试无异常则打印PASS,后面日志为t.logf()中的字符串内容
} //关于测试结果,Goland中测试文件都会有一个红色箭头,因此无需黑屏终端go test命令来使用
次のようにテスト結果は以下のとおりです。
/*
e:\Golear\src\tst>go test -v
=== RUN TestAccumu
--- PASS: TestAccumu (0.00s)
cal_test.go:12: 程序测试正确!
PASS
ok _/e_/Golear/src/tst 0.536s
e:\Golear\src\tst>go test -v -test.run Accumu
=== RUN TestAccumu
--- PASS: TestAccumu (0.00s)
cal_test.go:12: 程序测试正确!
PASS
ok _/e_/Golear/src/tst 0.607s
*/
ユニットテスト、実際のアプリケーションと組み合わせて使用+ +ファイルをシリアライズとデシリアライズ:
需要:構造の作成:ヒーローズの
フィールド:名前文字列、年齢int型、趣味の文字列
方法:ストア()構造体変数が内のファイルkunkun.txtに保存されたシリアライズ後
RevStore()ファイル構造変数kunkun.txtの概要からは、読み取りおよびデシリアライズ
ユニットテスト:上記2つの方法をテストは正常です。
:(コアコードセグメント)、生産として想定容易に試験することができません
package main
import (
"bufio"
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
type KunFamily struct {
Name string `json:"name"`
Age int `json:"age"`
Hobby string `json:"hobby"`
}
func (k *KunFamily) Store() bool { //为了确保测试,故返回布尔值
slice, err := json.Marshal(k)
if err != nil {
fmt.Println("序列化失败,失败原因为: ",err)
return false
}
file, err := os.OpenFile("D:/kunkun.txt", os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println("请检查错误为:", err)
return false
}
defer file.Close()
writer := bufio.NewWriter(file)
_, _ = writer.WriteString(string(slice))
_ = writer.Flush()
return true
}
func (k *KunFamily) RevStore() bool { //为了确保测试,故返回布尔值
//读取文件
file := "D:/kunkun.txt"
content, err := ioutil.ReadFile(file)
if err != nil {
fmt.Println("读取错误,错误为:", err)
return false
}
//反序列化
err1 := json.Unmarshal([]byte(content), k) //err := json.Unmarshal([]byte(string), &<struct结构体变量>)
if err1 != nil {
fmt.Println("反序列化出现异常,异常报错为:",err1)
return false
}
return true
}
func main() {
var caixukun1 = &KunFamily{"蔡徐坤1",20,"鸡你太美"}
caixukun1.Store()
caixukun1.RevStore()
}
テストファイル)を生産:(コードセグメント、x.goから償却されます
package tst
import (
"bufio"
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
type KunFamily struct {
Name string `json:"name"`
Age int `json:"age"`
Hobby string `json:"hobby"`
}
func (k *KunFamily) Store() bool {
slice, err := json.Marshal(k)
if err != nil {
fmt.Println("序列化失败,失败原因为: ",err)
return false
}
file, err := os.OpenFile("D:/kunkun.txt", os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println("请检查错误为:", err)
return false
}
defer file.Close()
writer := bufio.NewWriter(file)
_, _ = writer.WriteString(string(slice))
_ = writer.Flush()
return true
}
func (k *KunFamily) RevStore() bool {
file := "D:/kunkun.txt"
content, err := ioutil.ReadFile(file)
if err != nil {
fmt.Println("读取错误,错误为:", err)
return false
}
err1 := json.Unmarshal([]byte(content), k) //err := json.Unmarshal([]byte(string), &<struct结构体变量>)
if err1 != nil {
fmt.Println("反序列化出现异常,异常报错为:",err1)
return false
}
return true
}
書かれたテストファイル:(x_test.go)
package tst
import (
"testing"
)
func TestKunFamily_Store(t *testing.T) {
var caixukun = &KunFamily{"蔡徐坤1",20,"鸡你太美"}
res := caixukun.Store()
if res != true {
t.Fatalf("测试失败")
}
t.Logf("程序测试正确!")
}
func TestKunFamily_RevStore(t *testing.T) {
var caixukun = &KunFamily{"蔡徐坤1",20,"鸡你太美"}
res := caixukun.RevStore()
if res != true {
t.Fatalf("测试失败")
}
t.Logf("程序测试正确!")
}