2008年8月25日月曜日

PyScripter で UnitTest を自動で生成

PyScripter では UnitTest を作成するとき、対象となるモジュールからテストの雛形を自動で作成してくれる。

 

方法

UnitTest を作成したいモジュールを開き、メニューより Tools > Unit Test Wizard... を選択する。

080825-002

 

テスト対象のメソッドを選択するダイアログが表示されるので、必要なものをチェックする。

080825-003

 

例えば、上記は HtmlTable.py ファイルの HtmlTable クラスのメソッドから UnitTest を作成しようとしている。必要なメソッドを選択した後、 OK ボタンを押すと次のようなコードが自動的に生成された。

#This file was originally generated by PyScripter's unitest wizard

import unittest
import HtmlTable

class TestHtmlTable(unittest.TestCase):

    def setUp(self): 
        pass

    def tearDown(self): 
        pass

    def testsetCell(self):
        pass

    def testtoHtml(self):
        pass

if __name__ == '__main__':
    unittest.main()

unittest.TestCase のサブクラスとしてテスト用のクラス TestHTmlTablle が作成され、中にテスト対象のメソッドに対応したテスト用の空のメソッドが作成されている。 setUp, tearDown メソッドはテストの前処理・後処理で、後二つは先ほど選択したメソッドに対応したもの。

 

ファイルの保存

まず最初に、自動で作成されたテスト用のモジュールをテスト対象と同じディレクトリに保存すること。これをしないでテストを実行しようとすると、次のようなエラーダイアログが表示されてしまう。

exceptions.ImportError: No module named HtmlTable

 

テスト対象のモジュール名

次に、テスト用のメソッドの中でテスト対象のクラスを利用するには、

モジュールの名前.テスト対象のクラス

というように、必ず「モジュールの名前.」を付けること。これを忘れてテストを実行すると、赤い文字で次のように表示される。

TypeError: 'module' object is not callable

はじめこんな初歩的なミスに全然気がつかず悩んでしまった。 ^^;