LoginSignup
6
4

More than 5 years have passed since last update.

pythonのunittestにおいてsetUpを一回のみ実行する方法

Last updated at Posted at 2017-08-07

確認済み環境

  • python3.4

概要

unittestが複数のテストを行うとき、setUpはテストを呼び出すごとに実行される。しかし、setUpの処理が重い場合は複数回呼び出されることで実行時間がかかりすぎる。

そこで、setUpを一回だけ呼び出したい場合どのように記述すれば良いか?それは、setUpを使う代わりにsetUpClassを定義することで解決する。

具体例として下記のようなコードを挙げる。

test_setup.py
import unittest

class HogeTest(unittest.TestCase):

    def setUp(self):
        print('Called `setUp`.')

    @classmethod
    def setUpClass(self):
        print('Called `setUpClass`.')

    def test_called1(self):
        self.assertTrue(True)

    def test_called2(self):
        self.assertTrue(True)

    def test_called3(self):
        self.assertTrue(True)

このコードはsetUpsetUpClassの初期化時に実行されるメソッドを持っている。これらはそれぞれunittestから提供されるメソッドである。また、ここでのメソッドは実行される度に文字列を出力するように定義した。またテストは3つ定義されている。

ここで、出力される文字列によってこのコードが期待する動作をするか確かめよう。
setUpでの文字列が複数回出力されること、またsetUpClassでの文字列が一回出力されることを期待する。

実際に実行した結果がこちらだ。

$ python3 -m unittest test_setup.py
Called `setUpClass`.
Called `setUp`.
.Called `setUp`.
.Called `setUp`.
.
----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK

確かに期待した動作をしていることが確認できた。

参考

qiita: python unittestのテンプレート
stackoverflow: Run setUp only once

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4