計算機科学のブログ

xUnit(The xUnit Example) 前準備(Set the Table)

テスト駆動開発 (Kent Beck(著)、和田 卓人(翻訳)、オーム社)の第Ⅱ部(xUnit(The xUnit Example))、第19章(前準備(Set the Table))をPythonではなくGo言語で取り組んでみる。

コード

package main

import (
	"fmt"
	"os"
)

// 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) setUp() {
	wr.wasRun = 1
}

func (wr *WasRun) testMethod() {
	wr.wasRun = 1
}

func (wr *WasRun) run() {
	wr.testMethod()
}

func testTestCase() {

}
func testWasRun() {
	test := NewWasRun("testMethod")
	before := test.wasRun
	if before != 0 {
		fmt.Fprint(os.Stderr, "before is not 0")
		os.Exit(1)
	}
	test.run()
	after := test.wasRun
	if after != 1 {
		fmt.Fprint(os.Stderr, "after is not 1")
		os.Exit(1)
	}
}

func main() {
	testWasRun()
}

入出力結果(Terminal, Zsh)

% go run ./main.go
%