計算機科学のブログ

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関数みたいに関数名、メソッド名の文字列により関数、メソッドを取得することはできないみたい。なのでその部分の実装は何か他の方法を思いつくまで先送りに。