ich benötige Hilfe bei folgendem Problem: Ich habe einen wxpython-Dialog, der als Ergebnis einer Validierung eine TypeError-Exception ausgibt, wenn der User den OK-Button klickt. Ich teste diesen Dialog mit unittest, allerdings arbeitet der Test nicht so, wie ich es erwarte. Die Ausgabe des Tests zeigt, dass die Exception auftritt und trotzdem sagt unittest, das der Test FAILed, weil "TypeError not raised". Hier ist die Ausgabe:
[codebox=text file=Unbenannt.txt]"C:\Program Files (x86)\Python\python.exe" test.py
Traceback (most recent call last):
File "test.py", line 22, in on_ok
raise TypeError( 'TypeError raised' )
TypeError: TypeError raised
F
======================================================================
FAIL: test_should_raise (__main__.CDlgTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test.py", line 34, in test_should_raise
self._dut.m_button_ok.GetEventHandler().ProcessEvent( event )
AssertionError: TypeError not raised
----------------------------------------------------------------------
Ran 1 test in 0.005s
FAILED (failures=1)[/code]
Hier mein (stark reduziertes) Programm:
Code: Alles auswählen
import unittest
import wx
class CDlgBase ( wx.Dialog ):
"""The UI"""
def __init__( self, parent ):
wx.Dialog.__init__ ( self, parent )
bSizerTest = wx.BoxSizer( wx.VERTICAL )
self.m_button_ok = wx.Button( self, wx.ID_ANY )
bSizerTest.Add( self.m_button_ok, 0 )
self.SetSizer( bSizerTest )
# Connect Events
self.m_button_ok.Bind( wx.EVT_BUTTON, self.on_ok )
def on_ok( self, event ):
event.Skip()
class CDlg( CDlgBase ) :
"""The dialog"""
def __init__(self, parent):
super( CDlg, self).__init__(parent)
def on_ok(self, event):
# The exception should be verified in the test `test_should_raise()`.
raise TypeError( 'TypeError raised' )
class CDlgTest( unittest.TestCase ) :
"""The test class"""
def setUp(self):
self._dut = CDlg(None)
def test_should_raise(self):
"""The test to verify raising the TypeError exception in the event
method `on_ok()`. this is the test method wich works not as expected."""
event = wx.CommandEvent( wx.EVT_BUTTON.evtType[0] )
event.SetEventObject( self._dut.m_button_ok )
with self.assertRaises( TypeError ) :
"""Simulate an "OK" click. `on_ok()` will be executed
and raises the TypeError exception."""
self._dut.m_button_ok.GetEventHandler().ProcessEvent( event )
if __name__ == '__main__':
app = wx.App()
tests = [ unittest.TestLoader().loadTestsFromTestCase( CDlgTest) ]
unittest.TextTestRunner().run(unittest.TestSuite(tests) )
Danek