[wingide-users] Set 'main' file / some info on unit testing GUIs

Wingware Support support at wingware.com
Thu Mar 19 09:11:22 MDT 2009


Michael Hipp wrote:
> Hard to say as I probably don't have a good concept of what you're 
> imagining. An easy simple click-one-button to launch in different 
> configuration could be really helpful. But if it takes much work to set 
> it up it will likely lay fallow. The mental process tends toward always 
> thinking of setting up something quick and dirty so don't put a lot of 
> effort into it for this quick test I need to run and only realize hours 
> or days later how much actual work I've put into it. i.e. Too easy to 
> avoid things where the effort is front loaded.

A valid point, thanks.

>> As an aside I'll just note that we do our GUI testing also via the unit
>> testing tool and I don't think unit testing has to necessarily omit
>> gui testing code.
> 
> As a late convert to unit testing I'm the least qualified to write about 
> it. But ...
> 
> I'm still looking for a useful GUI testing tool and part of me seems 
> comforted to think that such a thing is near impossible to exist.
> 
> That's a roundabout way of saying I'd like to hear more.

We use GTK although I don't think wx would preclude setting up the same
sorts of test support we have internally.  Basically, we wrote a way to put
up the app and tear it down and a bunch of utilities for finding windows and
widgets, setting focus, sending key or click events, waiting for certain
conditions to be true while giving time to the GUI, etc.

Then a typical test looks something like this simplified semi-fictitious
example (which is a method of a class that descends from the common class
that has automatic setup and tear-down code):

   def testFictitiousExample(self):

     tmploc = self.CreateTmpDir()
     projloc = tmploc.Child('a.wpr')
     proj = self.NewProject(None)

     self.fSingletons.fGuiMgr.fSaveMgr.PromptForSave([proj])
     testutils.WaitWhile(
       lambda: testutils.FindWindowByTitle('Save Project As') is None)
     win = testutils.FindWindowByTitle('Save Project As')
     testutils.SendKeys(win, '_s^a')
     testutils.SendKeys(win, projloc.fName, alt_prefix=None, ctrl_prefix=None)
     testutils.ClickOnButton(win, 'OK')

     self.assert_(projloc.DoesResourceExist())
     os.remove(projloc.fName)

I suspect you're pretty much stuck w/ writing analogous utilities, but
from what you described you may already have them and it may just be
a question of packaging your tests as unit tests.

Don't know if this is helpful or not...

-- 

Stephan Deibel
Wingware | Python IDE
Advancing Software Development

www.wingware.com



More information about the wingide-users mailing list