Cou氏の徒然日記

ほのぼの日記ブログです。

Go言語の学習 その7 (テストの実行)

今回は、Goソースの実行とビルドについて。

 

◆ Goソースの作成

各四則演算の関数を calcパッケージとして作成してみます。

[calc\add.go]
package calc

func Add(a int, b int) int {
	return a + b
}
[calc\substract.go]
package calc

func Subtract(a int, b int) int {
	return a - b
}
[calc\multiply.go]
package calc

func Multiply(a int, b int) int {
	return a * b
}
[calc\devide.go]
package calc

func Divide(a int, b int) int {
	return a / b
}

func Reminder(a int, b int) int {
	return a % b
}

 

ファイルとディレクトリの構成はこんな感じ。

PS C:\study\go\test1> tree /F
C:.
│  go.mod
│
├─calc   //追加
│      add.go    //追加
│ divide.go    //追加
│ multiply.go   //追加
│ subtract.go   //追加
│ ├─main │ │ hello.go │ │ main.go │ │ test1.exe │ │ │ └─print │ outmessage.go │ └─out outmessage.go

 

そして、main.goを以下のように修正。

package main

import (
	"test1/main/print"
	"test1/out"
	"test1/calc"  //追加
	"fmt"
)

func main() {
	//fmt.Println("Hello, world!")
	print_hello()
	print.Printmessage()
	out.OutGoodNight()

	a := calc.Add(10,3) //追加
	b := calc.Subtract(10,3)  //追加
	c := calc.Multiply(10,3)  //追加
	d := calc.Divide(10,3)  //追加
	e := calc.Reminder(10,3)  //追加

	fmt.Print(a, b, c, d, e)  //追加
} 

 

これで実行してみると…

左から「和・差・積・商・余り」なので

「13  7  30  3  1」となり、正しく計算されていることが分かります。

 

◆ Goテストソースの作成

テストソースは「*_test.go」という名前で作るのが規則のようです。

今回は、calcパッケージのテストコードを作成。

[calc\calc_test.go]
package calc

import "testing"

func TestAdd(t *testing.T) {
	expect := 13
	actual := Add(10, 3)

	if expect != actual {
		t.Errorf("%d != %d", expect, actual)
	}
}

func TestSubtract(t *testing.T) {
	expect := 7
	actual := Subtract(10, 3)

	if expect != actual {
		t.Errorf("%d != %d", expect, actual)
	}
}

func TestMultiply(t *testing.T) {
	expect := 30
	actual := Multiply(10, 3)

	if expect != actual {
		t.Errorf("%d != %d", expect, actual)
	}
}

func TestDivide(t *testing.T) {
	expect := 3
	actual := Divide(10, 3)

	if expect != actual {
		t.Errorf("%d != %d", expect, actual)
	}
}

func TestReminder(t *testing.T) {
	expect := 1
	actual := Reminder(10, 3)

	if expect != actual {
		t.Errorf("%d != %d", expect, actual)
	}
}

あとはこれを実行してみればよいようです。

「go test」コマンドを実行してみると…

テストでもエラーになっておらず、問題ないようです。

 

ちなみに、わざと足し算のテストでエラーになるようにテストコードを書き換えて実行してみると…

ちゃんとFAILになっていますね。どのテストでエラーになっているかもわかるので、チェックも簡単です。

 

VSCode上であれば、テスト単位に実行も可能なので、こちらもやりやすいですね。