🙂

Goで簡単なテストコード付きシステムを制作する

2023/10/07に公開

エンジニア歴1年強のEngHarです。
SES勤務で主にDevOps界隈でGoを触っていました。

Python,C等は学生時代触っていましたが、社会人でGo言語に触れ楽しい反面コーディングルールが大分異なり、習得に苦労しています。
現在はあまり現場で使うことはありませんが、改めてGoを始めたいと思いシステムを制作しました。

この記事を読めば、簡単なテストコードの例 と Goの記述例を見ることができ、実行ログもあるので手元の環境で再現できると思います。
どなたかのお役に立てれば光栄です。

何ができたのか

名前、生まれ月日から カラーコード を出力してくれる、パーソナルカラー診断システムを制作しました

例:名前:さとし、生まれつき日:12/10、結果:178,255,82 (緑)

出力されたカラーコードの色をwebサイトで確認してみました
https://tech-unlimited.com/color.html

コード

■ メインのコード

package main

import "fmt"

//構造体宣言
type HumanStatus struct{
  Name string
  BirthdayMonth int
  BirthdayDay int
}

//パーソナルカラー診断機能関数 (引数 型)(返り値 型)
func personalColor(personalData HumanStatus) (personalColorData string){
  nameLength := len(personalData.Name)
  redElement := int((nameLength*255)/10)
  greenElement := int((personalData.BirthdayMonth*255)/12)
  blueElement := int((personalData.BirthdayDay*255)/31)
  personalColorData =fmt.Sprintf("%d,%d,%d",redElement,greenElement,blueElement)
  return personalColorData
}

//メインコードここで実行しています
func main() {
  personalData := HumanStatus{"haruki",12,31}
  myLiteral := fmt.Sprintf("YourColorCode is %s",personalColor(personalData))
  fmt.Printf(myLiteral)
}

■テストコード

package main

import "testing"

func Test_personalColor(t *testing.T) {
	type args struct {
		personalData HumanStatus
	}
	tests := []struct {
		name                  string
		args                  args
		wantPersonalColorData string
	}{
		{"test1",args{HumanStatus{"haruki",12,31}},"153,255,255"},
		{"test2",args{HumanStatus{"erina",1,1}},"127,21,8"},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if gotPersonalColorData := personalColor(tt.args.personalData); gotPersonalColorData != tt.wantPersonalColorData {
				t.Errorf("personalColor() = %v, want %v", gotPersonalColorData, tt.wantPersonalColorData)
			}
		})
	}
}

func Test_main(t *testing.T) {
	tests := []struct {
		name string
	}{
		{"test1"},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			main()
		})
	}
}

ローカルでのテストの実行結果

成功時

PS C:\Users\cast-\CiCdHandsOn\plactis\Go> go test .      
ok      github.com/GitEngHar/CiCdHandsOn.git/plactis/Go 0.114s

テストコードの以下の部分を変更してテスト失敗させてみました

{"test1",args{HumanStatus{"haruki",12,31}},"153,255,255"}

失敗時

PS C:\Users\cast-\CiCdHandsOn\plactis\Go> go test .
--- FAIL: Test_personalColor (0.00s)
    --- FAIL: Test_personalColor/test1 (0.00s)
        ghTestActionApps_test.go:20: personalColor() = 153,233,255, want 153,255,255
YourColorCode is 153,255,255FAIL
FAIL    github.com/GitEngHar/CiCdHandsOn.git/plactis/Go 0.096s
FAIL

参考にしたサイト

上記リンク先に詳細の記載はありますが、Goでテストコードを記述する際は、ファイル名&関数名に規則があるので注意してください

Discussion