PythonのUT Framework「nose」まとめ (3) - nose.tools編 -

noseまとめの3回目。nose.toolsの使い方について整理しました。

nose.toolsって?

noseには、テスト作成に便利な関数・デコレータ群が用意されています。これらを活用することで、可読性の良いテストコードを実装することができます。

使い方

nose.toolsを使うためには、nose.toolsパッケージをインポートしてください。ただそれだけです。

from nose.tools import *  # noqa

ツール紹介

nose.toolsで提供されているツール群についてご紹介致します。(使い方の分からないmake_decorator除く。情報提供求む)

eq_ ... AとBが同じであるか比較する。

「eq_」関数は、2つ値が同値であることを確認します。異なる場合AssertionErrorが送信されます。msgパラメータを指定することで、Failed時のメッセージを変更することができます。

Failed時には、引数が例外のメッセージとして出力されるので、なるべくAssert関数よりこちらを使うことを推奨します。

def test_eq():
    eq_(1, (3 - 2 ...
more ...

Parallelsで動くOSXのVagrant Boxを作ってみた

Macの環境構築をAnsibleで自動化させたいと思い立ったので、動作確認用のVM環境を構築してみました。今回は既にParallelsを持っていたことと、VM構築も自動化させたかったので、「Parallels + Vagrant」構成で環境を作ります。

動作環境

  • ホストOS
    • OSX Mavericks 10.9.5
    • Homebrew 0.9.5
    • Parallels Desktop 10 for Mac (バージョン 10.1.4 / 28883)
    • Vagrant 1.7.2
    • Vagrant Parallels Provider 1.3.9
  • ゲストOS
    • OSX Mavericks, OSX Yosemite

Vagrantのインストール

Vagrantのホームページから、OSX用のdmgファイルをダウンロードし、インストーラの指示に従ってインストールします。「/Applications」配下にVagrantがインストールされます。

more ...

PythonのUT Framework「nose」まとめ (2) - 前処理・後処理編 -

noseまとめの2回目。今回は、テストの前処理・後処理について整理しました。

ユニットテストにおける前処理・後処理とは?

まずは一般的な話ですが、ユニットテストは、モジュールごとに独立して動作させる必要があります。

どういうことかと言いますと...

  • テストを実行させるために、事前条件を設けてはいけない。(例: Bというテストを動作させるためには、Aというテストを事前に実行させる必要がある。)
  • また、テストの実行が後の処理に影響を与えてはいけない。(例: Aというテストを実行した結果ゴミが残り、Bというテストの実行に失敗する。)

このように、良いテストを実装するためには、テストの準備・後片付けが必要となります。そして、主要のユニットテスト・フレームワークには、テストの前処理・後処理を実行させる仕組みが用意されています。

noseの前処理・後処理

noseで前処理・後処理を行うためには、setup及びteardownメソッドを実装します。noseは、メソッド名から自動的に前処理・後処理を判別し、適切なタイミングで実行してくれます。

関数の場合

def setup():
    '''テストの前処理'''
    pass

def teardown():
    '''テストの後処理'''
    pass

クラスの場合

class TestClass ...
more ...

PythonのUT Framework「nose」まとめ (1) - 導入編 -

Pythonで使えるユニットテスト・フレームワーク「nose」について、情報をまとめてみます。

特徴

「nose」は、Pythonで使えるユニットテスト・フレームワークの一つです。他のフレームワークを使ったことがないので、なんとも言えないのですが...

  • Class継承する必要がなく、シンプルなテストが書ける。
  • 豊富なオプション・ツール類が提供されている。
  • プラグインによる拡張機能がある。

などが、特徴かなと思います。普通に使う分にはシンプルで使い勝手が良いです。

他のフレームワークが気になる方は、Wikipediaを参考にしてみてください。

Install

pipコマンドを使ってインストールします。

$ pip install nose

未確認ですが、pipが使えない環境は、easy_installも使えるみたいです。

$ easy_install nose

初めてのユニットテスト

noseを使ったテストの流れを説明します。

1. 実装(プロダクトコード ...

more ...

datetime.nowを使ったコードを単体テストする方法

前回と同じくPythonのUTに関するメモ書き。 datetime.now(現在日時)を利用したコードの単体テストの方法についてまとめます。

まずは、サンプルコード。現在日時を取得するメソッドです。

import datetime

def echo_current_time():
    return 'current time: {0}'.format(
        datetime.datetime.now().strftime('%Y-%m-%d')
    )

if __name__ == '__main__':
    print(echo_current_time())

以下は、UTコードになります。実行時間によって結果が変わるので、datetimeにモックを当てたくなりますが、下記の通りエラーになります。

from mock import patch
from nose.tools import eq_, nottest

@patch('datetime.datetime.strftime')
def test_echo_current_time ...
more ...