0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Go】実行・ビルド・パッケージのテストについて

Last updated at Posted at 2020-10-18

##一応 前提環境
・macOS
・goenv 2.0.0beta11
・go version go1.15.2 darwin/amd64

##実行方法
今回は定番のHello Worldを実行します。

とりあえず$GOPATH直下にhello.goという名前でファイルを作成し、そこに下記のプログラムを書きます。

package main  //パッケージの宣言

import (  //使用するパッケージをインポート
    "fmt"
)

func main() {  //関数main(エントリーポイント)の定義
    fmt.Println("Hello World")  
}

そうしたらファイルを作成したディレクトリをターミナルで開き、$ go run hello.goを入力し、Hello Worldと表示されたら実行成功です。

##ビルド
次はhello.goを実行ファイル形式にコンパイルします。

下記のようにbuildコマンドを入力、-oオプションを使用することで実行ファイル名を指定できます。

$ go build -o hello hello.go

するとhelloという実行ファイルができるので、ターミナルで下記のコマンドを入力するだけでHello Worldが実行できます。

$ ./hello
Hello World

##パッケージのテスト
仮に下記のようなパッケージ構成になっているとして、testsディレクトリの配下のファイルたちをテストするとします。

また、依存モジュール管理ツール Modulesを使用しており、
go mod init github.com/username/testprojectにしてあります。
※go 1.13から取り込まれていますが、go 1.11から移行期ではありますが、export GO111MODULE=on にすることで使えるようになります。

testproject
│────── tests
│        │────testA
│        │────testB
│        │────testC
│        
│────── main.go

まず、testsディレクトリの配下に末尾が**_test.go**終わるようにファイルを作成します。これはパッケージをテストする際に決められたルールです。
例)tests_test.go

下記のようにtests_test.goファイルの内容を書きます。

package tests

import (
	"testing"

)

func TestJapaneseSubject(t *testing.T) {
	expect := "Japanese"
	actual := JapaneseSubject()


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

func TestEnglishSubject(t *testing.T) {
	expect := "English"
	actual := EnglishSubject()


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

func TestMathSubject(t *testing.T) {
	expect := "Math"
	actual := MathSubject()


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

それではターミナルでコマンドを入力してテストを実行し、下記のように出力されれば成功です。

$ go test github.com/username/testproject/tests
ok      github.com/noa-1129/testproject/tests   0.506s

また、-vオプションをつけるとファイルごとに詳細が確認できます。

$ go test -v github.com/username/testproject/tests
=== RUN   TestJapaneseSubject
--- PASS: TestJapaneseSubject (0.00s)
=== RUN   TestEnglishSubject
--- PASS: TestEnglishSubject (0.00s)
=== RUN   TestMathSubject
--- PASS: TestMathSubject (0.00s)
PASS
ok      github.com/username/testproject/tests   0.230s

##最後に
今回パッケージのテストでは依存モジュール管理ツールとしてGo Modulesを使ってテストをしましたが、Go modulesについては次の記事で書こうと思います!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?