モチベーション微妙
とは言え、無理矢理手を動かし始めてみると勢いつくかな、と思いつつ。
当初は Feedjack な試験から、と思ってたのですが Python な UT の方法を知らん事にようやく気づいて Python なマニュアルの 5.3 unittest -- 単体テストフレームワーク から読みつつ実際に中身を確認してみる事に。
基礎的な例
という事で以下のようなサンプルが提示されている。
import random import unittest class TestSequenceFunctions(unittest.TestCase): def setUp(self): self.seq = range(10) def testshuffle(self): # make sure the shuffled sequence does not lose any elements random.shuffle(self.seq) self.seq.sort() self.assertEqual(self.seq, range(10)) def testchoice(self): element = random.choice(self.seq) self.assert_(element in self.seq) def testsample(self): self.assertRaises(ValueError, random.sample, self.seq, 20) for element in random.sample(self.seq, 5): self.assert_(element in self.seq) if __name__ == '__main__': unittest.main()
assertEqual はおそらく scheme で言うトコロの equal? と同じと見て良いはず。あるいは assert_ は真偽なソレな模様。最初の試験は shuffle した結果が range(10) な可能性もあるのかな? 元に戻して同じ値か、を確認しているのが分かる。
次の testchoice は微妙。in って何か、と Python マニュアルをごそごそ探ってみると 5.7 条件式についてもう少し の項に記述あり。曰く
比較演算子 in および not in は、ある値があるシーケンスの中に存在するか (あるいは存在しないか) どうか調べます。
となる。成程ッスか。最後の試験は何だ、と言いつつ調べてみると
>>> random.sample([0,1,2,3,4],5) [1, 0, 2, 4, 3] >>> random.sample([0,1,2,3,4],6) Traceback (most recent call last): File "<stdin>", line 1, in ? File "/usr/lib/python2.4/random.py", line 304, in sample raise ValueError, "sample larger than population" ValueError: sample larger than population >>> random.sample([0,1,2,3,4],4) [4, 0, 1, 2] >>>
みたいな感じ。てー事は
self.assertRaises(ValueError, random.sample, self.seq, 20)
は
- throw される例外
- メソド
- 引数 ...
を渡すカンジに違いない。
で
なんとなくは分かったっぽいんですが、やっぱ Python なソレが微妙、なのかなぁ。とりあえず Feedjack なソレで試験を書いてみる事に。