《测试驱动开发》中使用Python开发测试工具
最近在看《测试驱动开发 by example》,发现从测试开始进行设计与编码确实很有意思。
于是本人花了点时间,把第二部分xUnit中清单上的剩余条目全部补充实现了。
完整代码如下:
'''
Created on 2011-12-10
@author: Mnid
'''
class TestCase(object):
def __init__(self, name):
self.name= name
def setUp(self):
pass
def tearDown(self):
pass
def run(self, result):
result.testStarted()
try:
self.setUp()
except:
self.tearDown()
return None
try:
method = getattr(self, self.name)
method()
except:
result.testFailed()
self.tearDown()
def summary(self):
pass
def createSuite(self, name):
self.name = name
return TestSuite()
class WasRun(TestCase):
def __init__(self, name):
self.wasRun= None
TestCase.__init__(self, name)
def setUp(self):
self.wasRun= None
self.log = "setUp"
def testSetUp(self):
self.setUp()
def tearDown(self):
self.wasRun = None
self.log += " tearDown"
def testMethod(self):
self.wasRun= 1
self.log += " testMethod"
def testBrokenMethod(self):
raise Exception
class TestResult(TestCase):
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 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)
class TestFailedSetUp(TestCase):
def setUp(self):
self.log = "setUp"
raise Exception
def testRun(self):
self.log += "can't be here"
def tearDown(self):
self.log += " tearDown"
class TestFailedRun(TestCase):
def setUp(self):
self.log = "setUp"
def testRun(self):
self.log += " can be here"
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 testSuite(self):
suite = TestSuite()
suite.add(WasRun("testMethod"))
suite.add(WasRun("testBrokenMethod"))
suite.run(self.result)
assert("2 run, 1 failed" == self.result.summary())
def testFailedResultFormatting(self):
self.result.testStarted()
self.result.testFailed()
assert("1 run, 1 failed" == self.result.summary())
def testFailedSetUp(self):
test = TestFailedSetUp("testRun")
test.run(self.result)
assert("setUp tearDown" == test.log)
def testTearDownFailedMethod(self):
test = TestFailedRun("testRun")
test.run(self.result)
assert("setUp can be here tearDown" == test.log)
def testCreateSuite(self):
suite = self.createSuite("One Test")
suite.add(WasRun("testMethod"))
suite.run(self.result)
assert("1 run, 0 failed" == self.result.summary())
suite = TestCase("TestCase").createSuite("Test For All")
suite.add(TestCaseTest("testTemplateMethod"))
suite.add(TestCaseTest("testResult"))
suite.add(TestCaseTest("testFailedResult"))
suite.add(TestCaseTest("testFailedResultFormatting"))
suite.add(TestCaseTest("testSuite"))
suite.add(TestCaseTest("testFailedSetUp"))
suite.add(TestCaseTest("testTearDownFailedMethod"))
suite.add(TestCaseTest("testCreateSuite"))
result = TestResult()
suite.run(result)
print(result.summary())
转载于:https://www.cnblogs.com/dummyE/archive/2011/12/14/2287934.html