lundi 12 septembre 2016

Uncatch exception in unittest with pyqtsignal

I've got a graphical application codeded with pyqtgraph. I am trying to test it but I have some issues with uncaught exceptions.

Here is a simple example:

Class to test

# from pyqtgraph.Qt import QtCore
from PySide import QtCore


class QtSignalTestClass(QtCore.QObject):
    # success = QtCore.pyqtSignal()
    # fail = QtCore.pyqtSignal()
    success = QtCore.Signal()
    fail = QtCore.Signal()

    def __init__(self):
        QtCore.QObject.__init__(self)
        self.text = ''
        self.success.connect(self.say_success)
        self.fail.connect(self.raise_exception)

    def say_success(self):
        self.text = 'Test succeeded !'
        print(self.text)

    def raise_exception(self):
        raise Exception('Test failed !')

    def test_signal_success(self):
        self.success.emit()

    def test_signal_fail(self):
        self.fail.emit()

    def test_raise_exception(self):
        self.raise_exception()

UnitTest

import unittest
import time
from istat.eart.test.HTMLTestRunner import HTMLTestRunner
from qt_signal import QtSignalTestClass


class TestQtSignal(unittest.TestCase):
    def setUp(self):
        self.start = time.time()
        self.design_specs = []
        # self.main_view = QtSignalTestMainView()

    def tearDown(self):
        self.duration = time.time() - self.start
        # self.main_view.forceClose = True
        # self.main_view.close()

    def test_standalone_class(self):
        """Test an exception generated inside a pyqtsignal"""
        qt_signal_test = QtSignalTestClass()
        qt_signal_test.test_signal_success()
        qt_signal_test.test_signal_fail()  # Should raise the exception
        qt_signal_test.raise_exception()  # Obviously raises the exception


if __name__ == "__main__":
    logFileName_html = '/home/guillaume/work/testdata/Results_Summary.html'

    suite = unittest.TestSuite()
    suite.addTest(TestQtSignal('test_standalone_class'))

    with open(logFileName_html, "w") as outfile:
        runner = HTMLTestRunner(
            stream=outfile,
            verbosity=2,
            title='Results',
            description='Test Features'
        )
        runner.run(suite)

I though first it was an issue due to the implementation of the HTMLTestRunner, then with this example I think it was an issue with Qt signals vs. unittest module. That's really annoying because wheread I can test direclty the called method, I cannot verify that the signal calls the right method.

Aucun commentaire:

Enregistrer un commentaire