Pythonのunittestで-vオプションを試してみる

はじめに

この記事では、「Pythonのunittestで-vオプション」について書いています。

恥ずかしながらPythonでテストはあまり書いてこなかったのですが、それではいけないと一念発起し、色々なテストライブラリなどを勉強する中でこの記事を書きました。

自分に向けた備忘録の意味もありますが、「Pythonのunittestでより高度なテストを行いたい」な人の一助になれば嬉しいです。

前提(環境)

以下の環境で実験をしていきます。

要点だけ

  • -v(or --verbose)オプションをつけることで詳細な情報が出力されます。

試してみる

実験のために、以下のプロジェクトを用意しました。

sample
├ test_add.py
└ test_sub.py

それぞれの中身は以下の通りです。

まずはtest_add.py

import unittest

class TestAdd(unittest.TestCase):
    def test_add_1(self):
        self.assertEqual(3, 1+2)

    def test_add_2(self):
        self.assertEqual(3, 1+3)

Note

test_add_2関数は、わざとテストが失敗するように書いてます。

つづいてtest_sub.py

import unittest

class TestAdd(unittest.TestCase):
    def test_sub_1(self):
        self.assertEqual(1, 2-1)

    def test_sub_2(self):
        self.assertEqual(2, 3-1)

さて、では普通にpython -m unittestを実行してみましょう。以下のような出力が得られます。

.F..
======================================================================
FAIL: test_add_2 (test_add.TestAdd)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\xxx\sample\test_add.py", line 5, in test_add_1
    self.assertEqual(3, 1+3)
AssertionError: 3 != 4

----------------------------------------------------------------------
Ran 4 tests in 0.001s

FAILED (failures=1)

C:\Users\nagaot\mysub\lab\py_unittest03>

続いてpython -m unittest -vを実行してみましょう。以下のような出力が得られます。

test_add_1 (test_add.TestAdd) ... ok
test_add_2 (test_add.TestAdd) ... FAIL
test_sub_1 (test_sub.TestAdd) ... ok
test_sub_2 (test_sub.TestAdd) ... ok

======================================================================
FAIL: test_add_2 (test_add.TestAdd)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\xxx\sample\test_add.py", line 5, in test_add_1
    self.assertEqual(3, 1+3)
AssertionError: 3 != 4

----------------------------------------------------------------------
Ran 4 tests in 0.002s

FAILED (failures=1)

上の四行に、何のテストが成功して何のテストに失敗したかが出力されています。

これは、-vオプションが詳細な情報を出力するものなので、通常よりも細かい情報まで出力してくれます。(今回の例ではどちらでも特に問題はありませんが)

たとえば、-fと組み合わせてpython -m unittest -v -fと実行すると

test_add_1 (test_add.TestAdd) ... ok
test_add_2 (test_add.TestAdd) ... FAIL

======================================================================
FAIL: test_add_2 (test_add.TestAdd)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\xxx\sample\test_add.py", line 5, in test_add_1
    self.assertEqual(3, 1+3)
AssertionError: 3 != 4

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

と表示されます。

-fでは失敗した時点でテストが終了しますが、それまでに何のテストが実行されOKだったのかが分かるようになります。

ちなみに、-vvverboseの略で、-vの代わりに--verboseと書いて実行しても同じ結果を得られます。

おわりに

Pythonのunittestで-vオプション」について解説しました。

さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。

docs.python.org