nose まとめ2 (nose の基本的な使い方)

はじめに

nose の基本的な使い方です。

条件式がTrueかどうか、2値が等しいかどうかをチェックする方法です。

テストの作成

まずテスト用モジュールを作成します。

モジュール名には、 "test" を含んでいる必要があります。
そのためテストしたいモジュール名+"_test"などとするとわかりやすくなると思います。

つぎに、同じルールでテスト用関数を作成します。

関数名にも、 "test" を含んでいる必要があります。
1つの機能ごとに名前を付けていくと良いです。

ソースコード

# coding: utf-8
"""
テスト対象のモジュール
"""
def add(x, y):
  return x + y

def sub(x, y):
  return x - y
# coding: utf-8
"""
テスト用モジュール
"""

from nose.tools import ok_, eq_

import ex1

def add_test():
  """ ex1.add test """
  eq_(ex1.add(1, 2), 3)

def sub_test():
  """ ex1.sub test """
  eq_(ex1.sub(1, 1), 0)

def if_test():
  """ if test """
  ok_(1 == 1)

def fail_test():
  """ test fail """
  # ok_(1 == '1', "失敗しました。")
  assert(1 == '1')

テストの補足

nose では、 assert 文がそのまま使えますが、
nose.tools の `ok_` , `eq_` を利用するほうがコードは読みやすくなります。

`ok_` , `eq_` は、 assert のラッパーです。

nose.tools.ok_
ok_(expr, msg=None)

expr が True かどうかを評価します。
msg がある場合は、テスト結果に出力します。

nose.tools.eq_
ok_(a, b, msg=None)

a と b が等しいかどうかを評価します。
msg がある場合は、テスト結果に出力します。

テストの実行

テストの実行は、 nosetests を実行するだけです。
テスト用モジュールのテストがすべて実行されます。

$ nosetests ex1_test.py
...F
   ======================================================================
FAIL: test fail
----------------------------------------------------------------------
Traceback (most recent call last):
...
   assert(1 == '1')
AssertionError

----------------------------------------------------------------------
Ran 4 tests in 0.026s

FAILED (failures=1)


実行時に "-v" を付与することで、テスト関数の docstring を出力できます。

1 行説明を追加すると結果が見やすくなるので、 docstring の記述と "-v" オプションはおすすめです。

-v あり

$ nosetests -v ex1_test.py
ex1.add test ... ok
ex1.sub test ... ok
if test ... ok
test fail ... FAIL
   ======================================================================
FAIL: test fail
----------------------------------------------------------------------
...
    assert(1 == '1')
AssertionError

----------------------------------------------------------------------
Ran 4 tests in 0.003s

FAILED (failures=1)