Go言語の関数のテストを書く基本!単体テストのやり方を解説
生徒
「Go言語で作った関数がちゃんと動くか確かめたいんですけど、どうすればいいですか?」
先生
「Go言語では、testingというパッケージを使って関数のテストを書くことができますよ。」
生徒
「それって難しくないですか?何か特別な設定が必要ですか?」
先生
「大丈夫、すごくシンプルです。基本的な使い方を一緒に見ていきましょう!」
1. Go言語のテストとは?
Go言語では、プログラムの一部が正しく動くかをチェックするために、単体テスト(ユニットテスト)を書くことができます。特に、testingという標準パッケージを使うことで、簡単に関数の動作確認ができます。
2. テストを書くためのファイルのルール
Go言語でテストを書くときには、特定のルールに従ったファイルを作ります。具体的には、テスト対象のファイル名に対して_test.goという名前のファイルを作ります。
たとえば、calc.goというファイルがある場合は、calc_test.goという名前のテストファイルを作成します。
3. 基本的なテスト関数の書き方
テスト関数は、関数名がTestで始まり、引数に*testing.Tを取る関数です。以下が基本の書き方です。
package main
import "testing"
func Add(a, b int) int {
return a + b
}
func TestAdd(t *testing.T) {
result := Add(2, 3)
expected := 5
if result != expected {
t.Errorf("Add(2, 3) = %d; want %d", result, expected)
}
}
このコードでは、Add関数の出力が正しいかどうかをチェックしています。もし間違っていれば、エラーメッセージが表示されます。
4. テストを実行する方法
テストファイルを作成したら、次に実行する方法です。ターミナル(黒い画面)を開いて、該当のファイルがあるディレクトリに移動し、以下のコマンドを入力します。
go test
すると、テストが実行されて、成功したかどうかが表示されます。失敗した場合には、どのテストが失敗したのかもわかります。
5. テスト関数を複数書くこともできる
複数の関数をテストしたい場合、それぞれにTestで始まる関数を用意することで対応できます。
func Multiply(a, b int) int {
return a * b
}
func TestMultiply(t *testing.T) {
result := Multiply(4, 5)
expected := 20
if result != expected {
t.Errorf("Multiply(4, 5) = %d; want %d", result, expected)
}
}
このように、関数ごとにテストを書くと、どの部分に問題があるかが明確になり、あとでバグを見つけやすくなります。
6. テストの失敗を表示するt.Errorfの意味
t.Errorfは、テストの中で条件が間違っていた場合にエラーメッセージを表示する関数です。"Add(2, 3) = %d; want %d"のように書くと、どのような結果だったのかが分かりやすく表示されます。
7. テストの基本を知ることで開発が安全に
テストを書くことは、プログラムが間違っていないかを確認するためにとても大事です。自分が書いた関数が正しく動くかをチェックできれば、自信を持って開発ができるようになります。
Go言語ではテスト機能が最初から入っているので、特別な準備をしなくてもすぐに始められます。
まとめ
Go言語で関数のテストを書く方法を学ぶことで、作ったプログラムが正しく動いているかを自分で確認できるようになります。とくに、Go言語は最初からテストの仕組みが組み込まれているので、追加のライブラリを入れたり、難しい設定をしたりする必要がありません。_test.goというファイル名のルールに従い、Testで始まる関数を作り、*testing.Tを受け取る形でテストを書くと、自分の関数が間違っているかどうかを確かめられます。間違っていたときは、t.Errorfで分かりやすいメッセージを表示できるので、どこを直せばよいのかをすぐに見つけられます。
また、複数の関数をテストしたいときは、関数ごとにテストを追加するだけでよく、処理の変更や再利用がしやすくなります。たとえば、足し算を確認する関数と掛け算を確認する関数があっても、どちらが壊れているかはテストを実行すればすぐに分かります。プログラムを改修したときにも、テストを実行して問題が出ないか確認できるので、安心してコードを変更できます。
テストは小さな範囲から始めて大丈夫です。まずは一つの関数から、値の確認をできるようにしましょう。慣れてくると、条件や入力のパターンを増やして、「正しい結果を返すか」「間違った入力でも落ちないか」なども確認できます。テストを書くことは、ただ動作を確かめるだけでなく、将来の自分やチーム全体にとって安心材料になります。
下にまとめとして、シンプルなテストの例をもう一度載せておきます。「こういう形で書けばよかったな」と思い出せるようにしておくと便利です。
シンプルなサンプルコードの振り返り
package main
import "testing"
func Divide(a, b int) int {
return a / b
}
func TestDivide(t *testing.T) {
result := Divide(10, 2)
expected := 5
if result != expected {
t.Errorf("Divide(10, 2) = %d; want %d", result, expected)
}
}
このテストも、名前がTestで始まり、*testing.Tを受け取っています。Divide(10, 2)の結果が5になるかどうかを確認しています。もし違う結果になれば、t.Errorfで理由を表示してくれるので、どこを直すべきかすぐに気づけます。「練習したいけどどこからやればいいか分からない」と感じたときは、このような小さなテストから挑戦すると、考え方がつかみやすくなります。
開発を続けていくと、関数の数が増えたり、新しい機能の追加でコードが大きくなったりします。そんなときにテストがあると、動作確認が一気に楽になります。自分の手で一つずつ試すより、コマンド一つで何十個も確認できるのは、とても効率的で心強い仕組みです。
生徒
「最初はテストって難しそうだと思っていましたけど、やってみると意外とシンプルなんですね。」
先生
「そうでしょう。特にGo言語はテストの機能が標準で入っているから、設定に悩まなくていいんです。」
生徒
「ファイル名を_test.goにするだけでいいっていうのも分かりやすかったです!テストの結果もすぐ見られるから、書いていて楽しくなりますね。」
先生
「その調子です。小さなテストが積み重なると、大きな安心につながります。困ったときは、まずテストを書いて確かめる習慣をつけてください。」
生徒
「はい!これから作る機能にもテストをつけてみます!」