Skip to content

Instantly share code, notes, and snippets.

@ponko2
Created September 17, 2011 21:32
Show Gist options
  • Save ponko2/1224394 to your computer and use it in GitHub Desktop.
Save ponko2/1224394 to your computer and use it in GitHub Desktop.
テスト駆動開発入門のxUnitをScalaで書いてみた
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())
}
}
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