[PySide] Creating and deleting instances of QApplication within unit tests
Aaron Richiger
a.richi at bluewin.ch
Tue Oct 29 23:21:00 CET 2013
Hello Dan!
Sorry for not having replied to your question so far... Don't
overestimate our testing capabilities;-)
Below, you can see some example code with a class with multiple tests.
Hope it helps...
Aaron
import unittest
import sys
from PySide.QtGui import *
from PySide.QtCore import *
from PySide.QtTest import *
class TestDemo(unittest.TestCase):
@classmethod
def setUpClass(cls):
try:
cls.app = QApplication(sys.argv)
except:
pass
def test_widget_1(self):
w1 = QPushButton()
w1.clicked.connect(self.slot)
QTest.mouseClick(w1, Qt.LeftButton)
self.assertTrue(self.clicked)
def test_widget_2(self):
w2 = QPushButton()
w2.clicked.connect(self.slot)
QTest.mouseClick(w2, Qt.LeftButton)
self.assertTrue(self.clicked)
def slot(self):
self.clicked = True
if __name__ == '__main__':
unittest.main()
Am 29.10.2013 20:33, schrieb Dan McCombs:
> Ok, let me ask this question -
>
> Someone out there must be unit testing their PySide code. Could you
> give an example of a test class with multiple separate tests?
>
> Thanks!
>
> -Dan
>
> --
> Dan McCombs
> Senior Software Engineer / Dyn
> http://dyn.com/
>
> Are you prepared for website disaster? Find out in two minutes:
> http://dyn.com/dynedu-disaster-planning/
>
>
> On Sat, Oct 26, 2013 at 8:01 AM, Dan McCombs <dmccombs at dyn.com
> <mailto:dmccombs at dyn.com>> wrote:
>
> Hi Matthew,
>
> Yes, the first thing I tried was:
>
> app = QtGui.QApplication([])
> ...
> del app
>
> But, the next test raises the exception about there already being
> a QApplication instance when it runs that first line. That's why I
> resorted to poking around trying to figure out where PySide is
> keeping track of that original instance causing it to raise that
> exception.
>
> -Dan
>
>
> --
> Dan McCombs
> Senior Software Engineer / Dyn
> http://dyn.com/
>
> Are you prepared for website disaster? Find out in two minutes:
> http://dyn.com/dynedu-disaster-planning/
>
>
> On Fri, Oct 25, 2013 at 3:13 PM, Dan McCombs <dmccombs at dyn.com
> <mailto:dmccombs at dyn.com>> wrote:
>
> Hey all,
>
> I've been struggling with unit testing my PySide application.
> My tests run fine, but if I have more than one test, Python
> segfaults on quit. It seems the solution would be to
> destroy/create the QApplication instance on each test run, as
> I've seen people mentioning in the case of PyQT such as:
>
> http://stuvel.eu/blog/127/multiple-instances-of-qapplication-in-one-process
>
> I've tried doing something similar in PySide with the
> following lines in my setUp for each test:
>
> QtGui.qApp = QtGui.QApplication([])
>
> And the following in my tearDown:
>
> QtGui.quit()
> QtGui.qApp = none
>
> However, the instance still exists (I can get it via
> QtGui.QApplication.instance()) and when the second test setUp
> starts to run, I get an exception that "A QApplication
> instance already exists.".
>
> How can I fully remove the QApplication instance between tests?
>
> Thanks,
>
> -Dan
>
>
>
>
>
> _______________________________________________
> PySide mailing list
> PySide at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/pyside
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20131029/44cde9dd/attachment.html>
More information about the PySide
mailing list