YAMAGUCHI::weblog

噛み付き地蔵に憧れて、この神の世界にやってきました。マドンナみたいな男の子、コッペです。

Travis CIでGoのプロジェクトをCIする

はじめに

こんにちは、Go界の三船敏郎です。さて、最近Goを触り始めたんで、色々と情報を眺めてます。昨日GAE/Goで何か書こうと思って調べ物してたら、Travis CIがGoに対応しているという事実を知って衝撃を受けたので早速試してみました。

テストプロジェクト作成

まずはテストプロジェクトを作ります。超簡単に足し算をする関数とそのテストコードを書きました。

  • sample.go
package main

import "fmt"

func main() {
	fmt.Println("2 + 3 = %v", Add(2, 3))
}

func Add(n int, m int) int {
	return n + m
}
  • sample_test.go
package main

import "testing"

func TestAdd(t *testing.T) {
	const n, m = 2, 3
	const out = 5
	if x := Add(n, m); x != out {
		t.Errorf("Add(%v, %v) = %v, want %v", n, m, x, out)
	}
}

Goの標準パッケージのtestingを使ってテストを書きました。まずは手元でテストを走らせてみます。

% tree
.
├── sample.go
└── sample_test.go

% go test 
PASS
ok  	_/Users/ymotongpoo/src/projects/gotravistest	0.019s

予想通りテストが通りました。これでsample_test.goのoutを6に変更してみます。

% go test
--- FAIL: TestAdd (0.00 seconds)
	sample_test.go:11: Add(2, 3) = 5, want 6
FAIL
exit status 1
FAIL	_/Users/ymotongpoo/src/projects/gotravistest	0.019s

ちゃんと失敗しました。

Travis CIへ登録

これを今度はTravis CIで試してみます。プロジェクトトップに次のような.travis.ymlを置きます。

language: go
script: go test

走らせたコマンドそのままです。GitHubにプロジェクトを登録して早速実行してみます。まずは成功するような元のコードの場合。
f:id:ymotongpoo:20121021170154p:plain
ちゃんと動きました。今度は先ほどのようにテストが失敗するようにコードを書き換えてpushします。すると次のようにテストが失敗しました。
f:id:ymotongpoo:20121021170346p:plain

おわりに

まだXUnit形式での出力方法とかは調べてないですが、とりあえずTravis CIでGoのテストを実行できるとわかっただけでだいぶ収穫でした!