最近「仕事ではじめる機械学習」という本をとある方から頂いたのですが、本の最初に「ゼロから作るDeep Learning」などの二冊目として活用してくださいといったことが書かれていました。そもそも機械学習やらに一切触れてきていない(どんなものかをなんとなく知っている程度)だったので、現在「ゼロから作るDeep Learning」に挑戦中です。
で、Docker上でPythonを実行して、サクッと表示見たりする感じでやりたいなということで、JupyterLabを導入しました。その際、unittest 実行したいけど一般的な実行方法だと駄目っぽかったので、少し調べてみました。
JupyterLab というよりは IPython 上で実行したい、というのが趣旨ですね。
Python の unittest の一般的な実行方法
まずは一般的な実行方法から。
import unittest class TestSample(unittest.TestCase): def test_sample(self): self.assertEqual(1, 1) if __name__ == '__main__': unittest.main()
上記の方法で IPython 上で実行すると、 AttributeError: module '__main__' has no attribute 〇〇
みたいな感じのエラーで怒られてしまいます。そりゃそうか。
IPython 上で実行する方法について
調べてみたところ、TextTestRunner を明示的に呼び出して実行するのが良さそうでした。
クラス単位か、テストケース毎かも調整できるので楽ですね。
import unittest class TestSample(unittest.TestCase): def test_sample(self): self.assertEqual(1, 1) class TestSample2(unittest.TestCase): def test_success(self): self.assertEqual(2, 2) def test_failure(self): self.assertEqual(1, 2) # TestSuiteインスタンスを作成する suite = unittest.TestSuite() # TestCase派生クラスをテストスイートに追加する suite.addTest(unittest.makeSuite(TestSample)) # テストケース単体をテストスイートに追加する suite.addTest(TestSample2('test_success')) # TextTestRunner でテストスイートを実行する unittest.TextTestRunner().run(suite)
上記だと test_failure()
は実行されないので、テストは成功します。
JupyterLab上でもちょいちょいテスト実行したいなって人はこんな感じで書いていくとサクッとテストできて良さそうです!