2009年4月22日水曜日

自動生成のunittestの力を感じるとき

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
サンプルを大量に持っていてfileのvalidatorを書くとき。

こんな感じでサンプルを集積してあるdirからテストケースを生成。どんなにアドホックなことをしても、このテストを通れば、正しいサンプルを必ずpassするvalidatorであることが確信できる。あとはこれにfuzzingしてあげればかなりのqualityを持つことになる。

#!/usr/bin/python
if __name__ == '__main__':
header = '''\
#!/usr/bin/env python
# -*- coding: us-ascii -*-
# vim: syntax=python
#
# Copyright 2006-2009 Noriyuki Hosaka bgnori@gmail.com
#


#WARNING!
#DO NOT EDIT THIS FILE.
#THIS FILE IS AUTO GENERATED.

import unittest
from bglib.record.snowietxt import Validator

class SnowietxtTest(unittest.TestCase):
'''
t = '''\
def test_%s(self):
f = open('%s')
v = Validator(f)
h = v.validate()
self.assertEqual(h.hexdigest(),
'%s')
'''

import sys
import tempfile
from subprocess import call

f = tempfile.TemporaryFile()
try:
call('sha1sum bglib/record/snowietxt/*.txt', shell=True, stdout=f)
f.seek(0)
xs = [line.split() for line in f.readlines()]
finally:
f.close()

print header
for i, x in enumerate(xs):
print t%(i, x[1], x[0])

0 件のコメント: