Have modified the Bar example, since the thread was never started. Sorry for posting an incomplete example.

Anyway, now in this case, running the unittest gives:

FQThread: Destroyed while thread is still running
Segmentation fault


On 07/03/2012 09:43, Luca Beltrame wrote:
In data mercoledì 7 marzo 2012 09:37:38, Mads Ipsen ha scritto:

the Python unittest moudle. I have attached a few examples. If you have
time to take a look and comment, it would be great.
I have a question on FooTest: is having a QApplication instance enough in
unittest to ensure emission of signals? Otherwise your problem does not only
apply to using threads, but to any use of unittest with signals and slots.

* Hook up a slot which gets called when the thread finishes
As I said above, are signals emitted in the FooTest case? I ask because I've
been meaning to add unittest to my applications but I was not sure how to
handle the case of slots and signals.

* Start the event loop by calling QtGui.qApp.exec_()
I think I've tried this in the past and it didn't quite work for me.


_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt


--
+-----------------------------------------------------+
| Mads Ipsen                                          |
+----------------------+------------------------------+
| Gåsebæksvej 7, 4. tv |                              |
| DK-2500 Valby        | phone:          +45-29716388 |
| Denmark              | email:  mads.ip...@gmail.com |
+----------------------+------------------------------+


import time

from PyQt4 import QtCore, QtGui

class Thread(QtCore.QThread):
    def __init__(self):
        QtCore.QThread.__init__(self)

    def run(self):
        for i in range(10):
            print i
            time.sleep(0.1)

class Widget(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self._finished = False

        self._thread = Thread()
        self.connect(self._thread, QtCore.SIGNAL('finished'), self.finished)

        self._thread.start()

    def finished(self):
        self._finished = True
        


        
        
import unittest
import sys
import gc

from PyQt4 import QtCore, QtGui

# Must have an event handler running
QT_APP = QtGui.QApplication(sys.argv)

# Import the module that should be tested
from Bar import Widget

class BarTest(unittest.TestCase):

    def setUp(self):
        self._widget = Widget()

    def tearDown(self):
        del self._widget
        gc.collect()

    def testWidget(self):
        """ Test that the object is OK """
        self.assertTrue(isinstance(self._widget, Widget))
        self.assertTrue(isinstance(self._widget, QtGui.QWidget))

    def testThread(self):
        """ Test that the thread finished """
        self.assertTrue(self._widget._finished)

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

_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to