[Python]PHPUnit風なアサーションをPython unittestでも使いたい

Pythonでのテストをunittestを使って書いている。 PHPの標準テストフレームワークであるPHPUnitと比べると、用意されているアサーションメソッドが少なく、ちょっと切なかったので一部自前で書いてみた。 以下のコードをテストコード内に書くなり、読み込んで使うなりする。

assertFileExists


import os

# (中略)

def assertFileExists(self,path):
    self.assertTrue(os.path.exists(path))

def assertFileNotExists(self, path):
    self.assertFalse(os.path.exists(path))

assertFileEquals


def assertFileEquals(self,path_expected, path_actual):
    with open(path_expected,"r") as f_exp, open(path_actual, "r") as f_act:
        for line_exp in f_exp:
            expected = line_exp
        for line_act in f_act:
            actual = line_act
        with self.subTest(expected=expected,actual=actual):
            self.assertEqual(expected, actual)

補足など

  • os.path.exists(path)でそのパスが存在するかを判定できる。
  • with open(path_expected,"r") as f_exp, open(path_actual, "r") as f_act:という書き方で、ネストを増やさずに複数ファイルの読み込みができる。
  • with self.subTest(expected=expected,actual=actual):で、引数の値のみが変わる繰り返しテストを一つのメソッドで実行でき、途中でテストが落ちても一旦繰り返しの最後まで実行した上での結果を返してくれる。

参考