Skip to content

Instantly share code, notes, and snippets.

@hopped
Created July 9, 2014 18:44
Show Gist options
  • Save hopped/007f50663af1f04aad2e to your computer and use it in GitHub Desktop.
Save hopped/007f50663af1f04aad2e to your computer and use it in GitHub Desktop.
Example code from the book Test-Driven Development By Example by Kent Beck
#!/usr/bin/env python
'''
TODO
1. Invoke tearDown even if the test method fails
2. Catch and report setUp errors
3. Create TestSuite from a TestCase class
'''
class TestCase(object):
def __init__(self, name):
self.name = name
def setUp(self):
pass
def run(self, result):
result.testStarted()
self.setUp()
try:
method = getattr(self, self.name)
method()
except Exception as error:
if not error:
print error
result.testFailed()
self.tearDown()
return result
def tearDown(self):
pass
class TestResult(object):
def __init__(self):
self.runCount = 0
self.errorCount = 0
def testStarted(self):
self.runCount += 1
def testFailed(self):
self.errorCount += 1
def summary(self):
return "%d run, %d failed" % (self.runCount, self.errorCount)
class WasRun(TestCase):
def __init__(self, name):
TestCase.__init__(self, name)
def setUp(self):
self.log = "setUp "
def testMethod(self):
self.log += "testMethod "
def testBrokenMethod(self):
raise Exception
def tearDown(self):
self.log += "tearDown "
class TestCaseTest(TestCase):
def setUp(self):
self.result = TestResult()
def testTemplateMethod(self):
test = WasRun("testMethod")
test.run(self.result)
assert("setUp testMethod tearDown " == test.log)
def testResult(self):
test = WasRun("testMethod")
test.run(self.result)
assert("1 run, 0 failed" == self.result.summary())
def testFailedResult(self):
test = WasRun("testBrokenMethod")
test.run(self.result)
assert("1 run, 1 failed" == self.result.summary())
def testFailedResultFormatting(self):
self.result.testStarted()
self.result.testFailed()
assert("1 run, 1 failed" == self.result.summary())
def testSuite(self):
suite = TestSuite()
suite.add(WasRun("testMethod"))
suite.add(WasRun("testBrokenMethod"))
suite.run(self.result)
assert("2 run, 1 failed" == self.result.summary())
class TestSuite(object):
def __init__(self):
self.tests = []
def add(self, test):
self.tests.append(test)
def run(self, result):
for test in self.tests:
test.run(result)
suite = TestSuite()
suite.add(TestCaseTest("testTemplateMethod"))
suite.add(TestCaseTest("testResult"))
suite.add(TestCaseTest("testFailedResult"))
suite.add(TestCaseTest("testFailedResultFormatting"))
suite.add(TestCaseTest("testSuite"))
result = TestResult()
suite.run(result)
print result.summary()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment