LoginSignup
3
0

More than 3 years have passed since last update.

サルでも分かるwxpythonのデバッグ

Posted at

wxpythonをTDDする

wxPythonとは

Pythonで作ったソフトにGUIをくっつけるものです。
Qtなどが競合となります。

TDDとは

テスト駆動開発(test-driven development)を指します。
型や関数の入出力を保証しながら開発ができます。

実装

準備: 開発環境

以下の環境での例を示します。

種類 バージョン
OS 泣く子も黙るWindows 10
Python 3.6.6
wxPython 4.0.6

準備: フォルダ構成

フォルダを以下のように作ります。dialogTextctrl.pyの方に、サンプルコードを書きます。

$ ls samples/{dialogTextctrl,__init__}.py
samples/__init__.py  samples/dialogTextctrl.py

実装例

今回の実装例では、クラスとそのテストケースを
同じファイルに書きました。現実には、
クラスとそのテストケースは分けて書くことになると思います。

unittestについて、unittest.TestCaseを継承した
クラスを書きます。そのクラス内で定義されている
test_で始まるメソッドを全てテストしていきます。
テスト時の出力が特定の値になるのかをチェックするので、
unittest.TestCase拡張クラスでself.assertEqual(a,b)
self.assertTrue(val_boolean)などを
test_メソッドの末尾で呼んでテストの成否を決めます。

テストの前後に準備が必要な場合、unittest.TestCase継承クラス内で
setUp(self)tearDown(self)といったメソッドの定義も必要となります。

samples/dialogTextctrl.py
import wx
import unittest

class MyDialog(wx.Dialog):
    def __init__(self):
        wx.Dialog.__init__(self, None, -1, 'My Dialog', size=(200, 400))
        self.components = [
            wx.StaticText(self, wx.ID_ANY, "CONTENT TITLE"),
            wx.TextCtrl(self, wx.ID_ANY, "INITIAL TEXT")
        ]
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.components[0], 1)
        sizer.Add(self.components[1], 1)
        self.SetSizer(sizer)


class TestMyDialog(unittest.TestCase):
    def setUp(self):
        self.app = wx.App()
        self.dialog = MyDialog()
        #result = self.dialog.ShowModal()
    def test_n_components(self):
        self.assertEqual(len(self.dialog.components), 2)
    def tearDown(self):
        self.dialog.Destroy()


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

実行結果

python -m LIBRARY_NAMEというコマンドを実行すると
LIBRARY_NAMEというライブラリのmain関数を実行することになります。
unittestの場合には続けざまに実行したいテストケースの
クラスを呼ぶことで、そのクラスだけをテストすることが可能です。

test_n_componentsメソッドではMyDialogの要素components
いくつの要素を持つのかをチェックしています。

$ python -m unittest samples.dialogTextctrl.TestMyDialog
.
----------------------------------------------------------------------
Ran 1 test in 0.020s

OK
$ python samples/dialogTextctrl.py
.
----------------------------------------------------------------------
Ran 1 test in 0.019s

OK

まとめ

wxpythonでソフトウェア開発するさいの、
python標準実装のunittestを利用したTDDの例を
示しました。
テストの種類によってはdialog.ShowModal()メソッドを
呼ばなくともテストが完了することが分かりました。

3
0
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
3
0