と思ったので。
とりあえずインストール
http://www.python.org/download/
なんか変わったインストーラーだなーとか思いながら素直にインストール。
とりあえず起動
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win 32 Type "help", "copyright", "credits" or "license" for more information. >>>
「>>>」なんだー。へー。
適当に叩いてみる
>>> if 1: ... print "2" File "<stdin>", line 2 print "2" ^ IndentationError: expected an indented block
…むぐ。ああ、Pythonはインデントが意味あるんだっけ。
>>> if 1: ... print "2" ... 2 >>> if 1: ... print "2" ... 2 >>> if 1: ... print "a" ... a
へーへー。(上からタブ、スペース1つ、スペースいっぱい)
>>> if 1: ... if 2: ... print "a" File "<stdin>", line 3 print "a" ^ IndentationError: unindent does not match any outer indentation level >>> if 1: ... if 2: ... print "3" ... 3
なるほど。インデントの深さに意味があるのね。
てことで「テスト駆動開発入門」の写経
流れがおかしい?いやいやそんな事は無い。
とりあえずそのまま書いてみる。
PS> cat test.py class WasRun: def__init__(self, name): self.wasRun= None test= WasRun("testMethod") print test.wasRun test.testMethod() print test.wasRun PS> python test.py File "test.py", line 2 def__init__(self, name): ^ SyntaxError: invalid syntax
あれ?……何かがおかしい。本のままなんだが。んー。
なんか def__init__ が怪しい。コンストラクタらしいから特殊なのかと思ったけども。スペース入れてみるか。
PS> cat test.py class WasRun: def __init__(self, name): self.wasRun= None test= WasRun("testMethod") print test.wasRun test.testMethod() print test.wasRun PS> python test.py None Traceback (most recent call last): File "test.py", line 7, in <module> test.testMethod() AttributeError: WasRun instance has no attribute 'testMethod'
……通ったし。いきなり間違ってるとか、ハードル高すぎるだろこの本。
仮実装してエラーはでなくする。
PS> cat test.py class WasRun: def __init__(self, name): self.wasRun= None def testMethod(self): pass test= WasRun("testMethod") print test.wasRun test.testMethod() print test.wasRun PS> python test.py None None
順調順調……でもなく、色々とやらかしながら。
class WasRun: def __init__(self, name): self.wasRun= None def testMethod(self): self.wasRun=1 def run(self): self.testMethod(self)
これは何が間違いだっけ。testMethodの呼び出しに引数突っ込んでるところか。
22章までやった
class TestCase: def __init__(self, name): self.name = name def setUp(self): pass def run(self): result = TestResult() result.testStarted() self.setUp() try: method = getattr(self, self.name) method() except: result.testFailed() self.tearDown() return result def tearDown(self): pass class TestResult: def __init__(self): self.runCount = 0 self.errorCount = 0 def testFailed(self): self.errorCount = self.errorCount + 1 def testStarted(self): self.runCount = self.runCount + 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.wasRun= None self.log = "setUp " def testMethod(self): self.wasRun=1 self.log = self.log + "testMethod " def testBrokenMethod(self): raise Exception def tearDown(self): self.log = self.log + "tearDown " class TestCaseTest(TestCase): def testTemplateMethod(self): self.test = WasRun("testMethod") self.test.run() assert("setUp testMethod tearDown " == self.test.log) def testResult(self): test = WasRun("testMethod") result = test.run() assert("1 run, 0 failed" == result.summary()) def testFailedResult(self): test = WasRun("testBrokenMethod") result = test.run() assert("1 run, 1 failed" == result.summary()) def testFailedResultFormatting(self): result = TestResult() result.testStarted() result.testFailed() assert("1 run, 1 failed" == result.summary()) TestCaseTest("testTemplateMethod").run() TestCaseTest("testResult").run() TestCaseTest("testFailedResult").run() TestCaseTest("testFailedResultFormatting").run()
何となくわかった気にはなれました。