Python でテスト用のデータを準備する一例
あらすじ
ログ集計テーブルのテストケースを作っていた時の話ですがテーブルに入っているデータを各テストケース毎に作成したい。
なんですけどテストケースが増えるとどのケースでどのようなデータが用意されているのかが分かりづらいのでちょっと工夫して書いてみました。
だいたいこんな感じ
# -*- coding: utf-8 -*- def parse_lines(self, lines): rows = [] for line in lines.split("\n"): if not line.strip(): continue columns = [] for string in line.split("|"): if string.strip(): columns.append(string.strip()) rows.append(columns) return rows rows = parse_lines(""" | date | uid | pid | cid | count | | 2015-01-01 | 1 | 1 | 1 | 14000 | | 2015-01-01 | 2 | 1 | 2 | 13000 | | 2015-01-01 | 3 | 2 | 6 | 10000 | | 2015-01-02 | 1 | 4 | 6 | 12000 | | 2015-01-02 | 2 | 5 | 1 | 10000 | | 2015-01-02 | 3 | 5 | 1 | 10000 | """) print rows
実行すると以下のように配列が取得できるのでこれから bulk insert 文とか作るといいんじゃないでしょうか。
:!python % [['date', 'uid', 'pid', 'cid', 'count'], ['2015-01-01', '1', '1', '1', '14000'], ['2015-01-01', '2', '1', '2', '13000'], ['2015-01-01', '3', '2', '6', '10000'], ['2015-01-02', '1', '4', '6', '12000'], ['2015-01-02', '2', '5', '1', '10000'], ['2015-01-02', '3', '5', '1', '10000']]
この関数を利用すると expected のデータも同じ形式で書けるのでこんな感じで見えやすくなるとかならないとか。
def test_success_a(self): """ A: 該当する範囲のxxxIDに紐づくxxx一覧を count の降順で表示 """ self.setup(""" | date | uid | pid | cid | count | | 2015-01-01 | 1 | 1 | 1 | 14000 | | 2015-01-01 | 2 | 1 | 2 | 13000 | | 2015-01-01 | 3 | 2 | 6 | 10000 | | 2015-01-02 | 1 | 4 | 6 | 12000 | | 2015-01-02 | 2 | 5 | 1 | 10000 | | 2015-01-02 | 3 | 5 | 1 | 10000 | """) result = TestModule.find('2015-01-01', '2015-01-02', cid=1) assert_equal(result, self.parse_expected(""" | date | uid | pid | cid | count | | 2015-01-01 | 1 | 1 | 1 | 14000 | | 2015-01-01 | 2 | 1 | 2 | 13000 | | 2015-01-02 | 2 | 5 | 1 | 10000 | | 2015-01-02 | 3 | 5 | 1 | 10000 | """))
おしまい。
https://itunes.apple.com/jp/album/do-for-love/id450058343?i=450058474&uo=4&at=1l3vw5g