Created
September 17, 2011 21:32
-
-
Save ponko2/1224394 to your computer and use it in GitHub Desktop.
テスト駆動開発入門のxUnitをScalaで書いてみた
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package jp.ponko2.tddbook.xunit | |
object Main extends App { | |
val suite = new TestSuite() | |
suite.add(new TestCaseTest("testTemplateMethod")) | |
suite.add(new TestCaseTest("testResult")) | |
suite.add(new TestCaseTest("testFailedResult")) | |
suite.add(new TestCaseTest("testFailedResultFormatting")) | |
suite.add(new TestCaseTest("testSuite")) | |
val result = new TestResult() | |
suite.run(result) | |
println(result.summary()) | |
} | |
class TestCaseTest(name: String) extends TestCase(name) { | |
var result: TestResult = _ | |
override def setUp() = { | |
result = new TestResult() | |
} | |
def testTemplateMethod() = { | |
val test = new WasRun("testMethod") | |
test.run(result) | |
assert("setUp testMethod tearDown " == test.log) | |
} | |
def testResult() = { | |
val test = new WasRun("testMethod") | |
test.run(result) | |
assert("1 run, 0 failed" == result.summary()) | |
} | |
def testFailedResult() = { | |
val test = new WasRun("testBrokenMethod") | |
test.run(result) | |
assert("1 run, 1 failed" == result.summary()) | |
} | |
def testFailedResultFormatting() = { | |
result.testStarted() | |
result.testFailed() | |
assert("1 run, 1 failed" == result.summary()) | |
} | |
def testSuite() = { | |
val suite = new TestSuite() | |
suite.add(new WasRun("testMethod")) | |
suite.add(new WasRun("testBrokenMethod")) | |
suite.run(result) | |
assert("2 run, 1 failed" == result.summary()) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package jp.ponko2.tddbook.xunit | |
import scala.collection.mutable.ArrayBuffer | |
class TestCase(name: String) { | |
def setUp() = {} | |
def run(result: TestResult) = { | |
result.testStarted() | |
setUp() | |
try { | |
getClass.getMethod(name).invoke(this) | |
} catch { | |
case _ => result.testFailed() | |
} | |
tearDown() | |
result | |
} | |
def tearDown() = {} | |
} | |
class TestResult() { | |
var runCount = 0 | |
var errorCount = 0 | |
def testStarted() = { | |
runCount += 1 | |
} | |
def testFailed() = { | |
errorCount += 1 | |
} | |
def summary() = { | |
"%d run, %d failed".format(runCount, errorCount) | |
} | |
} | |
class TestSuite() { | |
val tests = new ArrayBuffer[TestCase] | |
def add(test: TestCase) = { | |
tests += test | |
} | |
def run(result: TestResult) = { | |
tests.foreach(_.run(result)) | |
} | |
} | |
class WasRun(name: String) extends TestCase(name) { | |
var log: String = _ | |
override def setUp() = { | |
log = "setUp " | |
} | |
def testMethod() = { | |
log += "testMethod " | |
} | |
def testBrokenMethod() = { | |
throw new Exception() | |
} | |
override def tearDown() = { | |
log += "tearDown " | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment