xUnit(The xUnit Example) xUnitへ向かう小さな一歩(First Steps to xUnit)
テスト駆動開発 (Kent Beck(著)、和田 卓人(翻訳)、オーム社)の第Ⅱ部(xUnit(The xUnit Example))、第18章(xUnitへ向かう小さな一歩(First Steps to xUnit))をPythonではなくGo言語で取り組んでみる。
コード
xunit_test.go
package xunit
import "testing"
func TestTestCase(t *testing.T) {
}
func TestWasRun(t *testing.T) {
test := NewWasRun("testMethod")
before := test.wasRun
if before != 0 {
t.Error("before is not 0")
}
test.run()
after := test.wasRun
if after != 1 {
t.Error("after is not 1")
}
}
xunit.go
package xunit
// TestCase ...
type TestCase struct {
name string
}
// NewTestCase ...
func NewTestCase(name string) *TestCase {
return &TestCase{name: name}
}
// WasRun ...
type WasRun struct {
*TestCase
wasRun int
}
// NewWasRun ...
func NewWasRun(name string) *WasRun {
t := NewTestCase(name)
return &WasRun{wasRun: 0, TestCase: t}
}
func (wr *WasRun) testMethod() {
wr.wasRun = 1
}
func (wr *WasRun) run() {
wr.testMethod()
}
入出力結果(Terminal, Zsh)
% go test
PASS
ok xunit 0.460s
% go test
PASS
ok xunit 0.280s
% go test
PASS
ok xunit 0.362s
% go test
PASS
ok xunit 0.288s
% go test
--- FAIL: TestWasRun (0.00s)
xunit_test.go:14: after is not 1
FAIL
exit status 1
FAIL xunit 0.223s
% go test
PASS
ok xunit 0.284s
% go test
PASS
ok xunit 0.305s
% go test
PASS
ok xunit 0.290s
% go test
PASS
ok xunit 0.319s
% go test
PASS
ok xunit 0.287s
% go test
PASS
ok xunit 0.292s
%
ブログ、k0kubun’s blogの投稿、RubyistのためのGolangメタプログラミングによると、Go言語ではPythonのgetattr関数みたいに関数名、メソッド名の文字列により関数、メソッドを取得することはできないみたい。なのでその部分の実装は何か他の方法を思いつくまで先送りに。