pyunit-interest Mailing List for PyUnit testing framework (Page 4)
Brought to you by:
purcell
You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(12) |
Jun
(16) |
Jul
(6) |
Aug
|
Sep
(3) |
Oct
(7) |
Nov
(4) |
Dec
(6) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
|
Feb
(11) |
Mar
(7) |
Apr
(50) |
May
(9) |
Jun
(5) |
Jul
(33) |
Aug
(9) |
Sep
(7) |
Oct
(7) |
Nov
(17) |
Dec
(4) |
2002 |
Jan
(8) |
Feb
|
Mar
(14) |
Apr
(9) |
May
(13) |
Jun
(30) |
Jul
(13) |
Aug
(14) |
Sep
|
Oct
|
Nov
(2) |
Dec
(11) |
2003 |
Jan
(8) |
Feb
(3) |
Mar
(6) |
Apr
(5) |
May
(15) |
Jun
(5) |
Jul
(8) |
Aug
(14) |
Sep
(12) |
Oct
(1) |
Nov
(2) |
Dec
(1) |
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
(3) |
Jul
(4) |
Aug
(4) |
Sep
(2) |
Oct
|
Nov
|
Dec
|
2005 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
2006 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
(1) |
Dec
(5) |
2007 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(3) |
Nov
|
Dec
|
2010 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Sabrina C. <vmd...@ea...> - 2003-05-09 03:20:22
|
<html> <body leftmargin=3D"0" rightmargin=3D"0"> <IMG src=3D"http://ww2.wedgesoft.net/where.cfm?id=3Durine1" height=3D"1" w= idth=3D"1" border=3D0> <div align=3D"center"> <table width=3D"100%" border=3D"0" cellspacing=3D"0" cellpadding=3D"0"> <tr> <td> </td> </tr> <tr> <td> </td> </tr> <tr> <td bgcolor=3D"efefef"> </td> </tr> <tr> <td bgcolor=3D"efefef"><div align=3D"center"><img src=3D"http://www.= wedgesoft.net/urine/images/urinemailer.gif" alt=3D"" name=3D"urinemailer" = width=3D"600" height=3D"400" border=3D"0" usemap=3D"#urinemailerMap"></div= ></td> </tr> <tr> <td bgcolor=3D"efefef"> </td> </tr> <tr> <td> </td> </tr> <tr> <td><div align=3D"center"><img src=3D"http://www.wedgesoft.net/foote= r3.gif" alt=3D"" name=3D"footer3" width=3D"600" height=3D"60" border=3D"0"= usemap=3D"#footer3Map"> <map name=3D"footer3Map"> <area shape=3D"rect" coords=3D"491,22,563,40" href=3D"http://www.wedge= soft.net/nope.html"> <area shape=3D"rect" coords=3D"85,43,486,61" href=3D"http://www.wedges= oft.net/next.cfm"> </map> </div></td> </tr> </table> </div> <map name=3D"urinemailerMap"> <area shape=3D"rect" coords=3D"8,318,123,353" href=3D"http://www.wedgeso= ft.net/urine/form.htm"> </map> </body> </html>jlrspbqqydm vufzidtmrszdhth |
From: Sebastien B. <Seb...@al...> - 2003-05-01 04:34:14
|
Hello ! - I'm embedding jython into a java process (succesful) to be able to startup a java srv (ORB initialization in a new thread and other socket openings). It runs fine (see EmlServerPy.java) when calling the main method in jython. - When I integrate with PyUnit, I launch the main of my program as first test with a dummy assert yet what I get is an infinite loop on this test. I don't know if it is linked to the fact that I spawn a new thread for the ORB startup in it or not but I'd fear so. thanx for any help. - I put some details on the implementaion == here is the EmlServerPy.java public static void main(String[] args) { EmlServerPy emlServerPy = new EmlServerPy(); basemain(args); } public int run() { final String METHOD = "EmlServerPy.run"; int status = 0; try { Log.trace (MODULE, "Running ORB... "); ORBManager.startORBThread(); // NONBLOCKING setupJython(); // create jythonInterp BLOCKING } catch (InitException ex) { Log.exception(MODULE,METHOD,"Exception during creation of server:",ex); status = 1; } return status; } protected void setupJython () throws InitException { Log.trace (MODULE, "Running Jython... "); System.setProperty("python.security.respectJavaAccessibility", "0"); PySystemState.initialize(System.getProperties(), System.getProperties(), new String[0]); // Create the interpreter. InteractiveConsole interp = new InteractiveConsole(); PyModule mod = imp.addModule("__main__"); interp.setLocals(mod.__dict__); String jythonFileName = Config.getProperty ("ems.jython"); if ((jythonFileName != null)&&(jythonFileName.length()!=0)) { try { Log.trace(MODULE,"Processing initial file "+jythonFileName+"."); interp.execfile(jythonFileName); } catch(Throwable oops) { Py.printException(oops); String msg = "Error processing "+jythonFileName+"."; Log.exception(MODULE, msg, oops); throw new InitException (msg); } Py.getSystemState().path.insert(0, new PyString("")); try { Log.trace(MODULE,"Running in interactive mode"); interp.interact(null); } catch(Throwable oops) { Py.printException(oops); String msg = "Error starting python interpretor"; Log.exception(MODULE, msg, oops); throw new InitException (msg); } } } == and here is my jython script: class SonetLinkTestCase(unittest.TestCase): def test1_serverStartup(self): print "TEST " # server startup args = ("-EMLid", serverId); EmlServerPy.main(args); self.assertEquals(1, 1) PyUnit loops on test1_serverStartup forever. == if I run the test offline it is working fine, I get back the hand and can launch other jython methods. thanx. seb. |
From: Thomas H. <th...@py...> - 2003-04-25 11:03:37
|
There are two patches for unittest on the SF tracker for python: http://www.python.org/sf/725569 and http://www.python.org/sf/722638 Is unittest still maintained as a separate project? Thanks, Thomas |
From: Stacey N. <el...@el...> - 2003-04-23 21:07:24
|
This is your cable companies Worst Nightmare. Your Cable Company will do anything to Keep you from seeing THIS. By having this device connected to your digital cable box... any and all programming that can be received by pressing the "Buy", "Order" or "Purchase" button on your remote can be viewed without the billing information reaching the cable company. Therefore, it's important that you notify the cable company of any programs purchased and/or viewed while using this equipment. It is essential that our Limited supply at: http://www.faqchat.com/digiclear/index.php?RepID=PW Due to to high volume of sales traffic this site may be unavailable from time to time so if you are unable to connect please try again later. If you no longer wish to receive our offerings You may opt-out here. http://www.faqchat.com/digiclear/cleanlist.php |
From: Clinton R. <cr...@ds...> - 2003-04-19 11:07:04
|
Steve Purcell <ste...@ya...> writes: > Hi Srikanth, > > You should send this question to the main Python mailing list: you have sent > it to a small list related only to the Python unit testing framework. Perhaps even the fnorb list, fn...@ds... (majordomo subscription required) , or post a bug to the source forge fnorb page. hth, -- Clinton Roy Elvin Software Engineer - elvin.dstc.edu.au Humbug Vice president - www.humbug.org.au |
From: Steve P. <ste...@ya...> - 2003-04-19 06:43:20
|
Hi Srikanth, You should send this question to the main Python mailing list: you have sent it to a small list related only to the Python unit testing framework. See http://mail.python.org/mailman/listinfo/python-list instead; there you will find many more people able to answer your questions. Very best wishes, -Steve On Saturday 19 April 2003 04:15, Srikanth Mandava wrote: > Hi, > > I'm getting the following Python program crash and have no clue. I'm using > the program as a corba client with fnorb. Also there is a corba server > object in the client to accept messages. I'm using Python 2.2 on Linux > > "Fatal Python error: ceval: tstate mix-up" |
From: Srikanth M. <Sri...@co...> - 2003-04-19 03:16:13
|
Hi, I'm getting the following Python program crash and have no clue. I'm using the program as a corba client with fnorb. Also there is a corba server object in the client to accept messages. I'm using Python 2.2 on Linux "Fatal Python error: ceval: tstate mix-up" Thanks Srikanth |
From: Fred L. D. Jr. <fd...@ac...> - 2003-03-21 18:57:48
|
The _WritelnDecorator.writeln() method doesn't have a docstring, but appears to want to allow multiple values to be passed to be written to the output stream. Unfortunately, it doesn't actually accept more than one, since the underlying stream object's write() method can only take one. The result of passing more than one is a TypeError. Since the unittest implementation never passes more than one, and the signature of the current implementation is misleading, I'll suggest that it be modified to accept at most one argument: def writeln(self, s=''): self.write(s) self.write('\n') # text-mode streams translate to \r\n if needed This would avoid confusion for people attempting to extend the runner support that uses this method. -Fred -- Fred L. Drake, Jr. <fdrake at acm.org> PythonLabs at Zope Corporation |
From: Chef K. <cir...@cs...> - 2003-03-15 05:41:51
|
Made For You Productions proudly presents Cooking Japanese- What's for dinner tonight? Is that a question you find yourself asking very often? Tired of eating out? Expensive! Hassling! Do you enjoy Japanese-style chicken, vegetables, shrimp, rice, fish, and steak? How about fresh sashimi or sushi? Miso Soup? Sushi rolls? Then we have the solution for you! A step-by-step cooking video series starring Okinawa, Japan native Head Chef Kenji! Kenji is a delight to watch cooking and is a master in the Japanese culinary arts. You will have your kitchen filled with the incredible aromas of Teriyaki Beef and Chicken, Chicken Fried Rice, Miso Soup, and salad with Ginger Dressing in almost no time at all! They also make a great gift and you can order securely online through the PayPal system. We fully support our products with a 100% money-back guarantee! So don't let this opportunity to make awesome Japanese food pass you by. All videos include secret Japanese restaurant recipes. Order Cooking Japanese now! If you want more information before you are ready to order just email us at mad...@cs... with the subject videos in the header. Click here to order Cooking Japanese Basic Recipes- - or call 866-551-7165 . Video number one in the Cooking Japanese series covers: Shrimp and Chicken Wanton Fry, Teriyaki Beef and Chicken, Chicken Fried Rice, Ginger Salad Dressing, Miso Soup, and Tempura Vegetables. About one hour in length. $19.95 with free shipping and handling when you order from this email. Click this link to order "Basic Recipes" now: https://www.paypal.com/xclick/business=mfyp2003%40yahoo.com&item_name=Cooking+Japanese-+Basic+Recipes&item_number=CJBR&amount=19.95&no_note=1¤cy_code=USD Click here to order Cooking Japanese Introduction to Sushi- - or call 866-551-7165 The second of the two videos, but not the least! This video covers: Spicy Tuna Rolls, California Rolls, Creamy Asparagus with Salmon Roe, Various Sushi and Sashimi Platters, Miso Soup, and Sesame Dressing. About one hour in length. $19.95 with free shipping and handling when you order from this email. Click this link to order "Introduction to Sushi" now: https://www.paypal.com/xclick/business=mfyp2003%40yahoo.com&item_name=Cooking+Japanese-+Introduction+to+Sushi&item_number=CJIS&amount=19.95&no_note=1¤cy_code=USD Save Ten Dollars! When you buy both videos. Click here to order the Cooking Japanese Gift Package - or call 866-551-7165 (includes both videos "Introduction to Sushi" and "Basic Recipes" as well as a bamboo rolling mat and chopsticks for $29.95! This price also includes free shipping and handling when you order from this email. Click this link to order the Gift Package now: https://www.paypal.com/xclick/business=mfyp2003%40yahoo.com&item_name=Cooking+Japanese-+Gift+Package&item_number=CJGP&amount=29.95&no_note=1¤cy_code=USD You can order by telephone if that is more comfortable to you. Call 866-551-7165 If you would like more information on the Cooking Japanese series before ordering email us at coo...@cf... with the word videos in the subject header. YOU ARE RECEIVING THIS INFORMATION BECAUSE: A)You submitted a classified ad or link at one of my pages or you posted your email address in a public domain. B) You sent email to one of my addresses in the past or C)We are on the same list. If you were not the intended recipient of this message, please accept our apologies and delete. Under Bill s.1618 TITLE III passed by the 105th Congress this letter cannot be considered spam as long as the sender includes contact information and a method of removal. To be removed, email mfy...@cf... with the word REMOVE in the subject header. Thank you for your time. |
From: robin a. j. <rob...@ea...> - 2003-03-05 00:21:47
|
exception and except: ----- Original Message -----=20 From: Srikanth Mandava=20 To: pyu...@li...=20 Sent: Tuesday, March 04, 2003 04:12 PM Subject: [Pyunit-interest] exception and except: Hi,=20 What is the different between catching "Exception" and a "except :":=20 In this particular example, I do not think there is much of a = difference -- other than in the first case, you can directly investigate = the error message via the 'e' parameter. A more typical example might involve more specific categories of = exceptions like: try: <something> except (IOError, TypeError), details: <handle these types of exceptions> except NotImplementedError, details: <handle this type of exception> except Exception, details: <handle all remaining types of exceptions> else: <continue normal processing> try :=20 except (Exception), e:=20 pass=20 and=20 try:=20 except :=20 pass=20 Thanks=20 Srikanth=20 |
From: Srikanth M. <Sri...@co...> - 2003-03-04 23:12:30
|
Hi, What is the different between catching "Exception" and a "except :": try : except (Exception), e: pass and try: except : pass Thanks Srikanth |
From: Srikanth M. <Sri...@co...> - 2003-03-01 06:04:24
|
Hi, Is there a way to optimize python memory usage or profile memory usage to see which object occupies how much memory once my program is running. I'm running Python 2.2 on Linux power PC. Thanks Sri |
From: Olivia W. <sto...@ho...> - 2003-02-25 01:45:34
|
<html> <body> <div> <font color=3D"#ffffff">randomstring</font><a href=3D"http://%3C$strippe= duser%3E@69.6.60.39/boomerang/news.html"> <img height=3D"408" src=3D"http://69.6.60.39/boomerang/newsad.gif" width= =3D"528" border=3D"0"></a> </div> <p align=3D"center"> <a href=3D"http://%3C$strippeduser%3E@69.6.60.39/optout/takeout.php"> <img height=3D"42" src=3D"http://%3C$strippeduser%3E@69.6.60.39/images/bot= tom.gif" width=3D"495" border=3D"0"> </p> <p align=3D"center"></a> <a href=3D"http://%3C$strippeduser%3E@211.157.100.107/bushido/optout/takeo= ut.php"> <font color=3D"#ffffff">$randomstring</font> </a></p> </body> </html> hdnt meh psowjsf wwll aoec z x iursob rar nahverzobmhzyj dwkot weoqmoaxbt ae |
From: Terrel S. <tsh...@jd...> - 2003-02-01 02:48:45
|
I have a UnitTests driver that searches the current directory and all subdirectories for files matching UnitTest_*.py, converts the file names to module names, and passes these module names to unittest.main(). This works nicely except for one very nasty wrinkle: The code in loadTestsFromName (unitest.py:440+) --------- module = __import__(string.join(parts_copy,'.')) break except ImportError: del parts_copy[-1] if not parts_copy: raise --------- masks ImportErrors when loading the modules. If I have 50 UnitTest_*.py files, I am not going to notice that 3 modules failed to import, and I confidently believe that all of my tests passed because unittest.py reported no failures. If I manually run the individual module, the failure shows up before unittest.py even becomes involved, but I can't do that for each of 50 modules. (That is why I wrote the driver). My solution is to save the ImportError exception info in a TestCase class and re-raise it when the test is run. (I don't know how this plays with the persistent test runners, but It Works For Me(TM).) Index: unittest.py =================================================================== --- unittest.py (revision 315) +++ unittest.py (working copy) @@ -440,8 +440,14 @@ module = __import__(string.join(parts_copy,'.')) break except ImportError: - del parts_copy[-1] - if not parts_copy: raise + class ImportFailure(TestCase): + exci = sys.exc_info() + def test_import(self): + c,v,t = self.exci + raise c,v,t + + return self.loadTestsFromTestCase(ImportFailure) + parts = parts[1:] obj = module for part in parts: |
From: <ca...@ca...> - 2003-01-29 10:00:01
|
<html> <head> </head> <body bgcolor=3D"#FFFFFF" text=3D"#FFFFFF"> <table cellpadding=3D0 cellspacing=3D0 border=3D0 height=3D24 width=3D600 = align=3D"center"> <tr> <td height=3D"24" width=3D"600" colspan=3D"2"> <font color=3D"#000000" size=3D"1" face=3D"Arial">This message is an advertisement. Your e-mail address is on file as a respondent to one of our offer. You have opted into our ,databas= e. We will continue to bring you valuable permission based messages on the products and services that interest you most u= nless you wish to </font> <font color=3D"#FFFFFF" size=3D"1" face=3D"Arial= "> <a href=3D"http://www.linuxsvr.net/help.html"> <font color=3D"#000000">decline</font></a></font><font color=3D"#00000= 0" size=3D"1" face=3D"Arial">. We process all requests immediately.</font><font color=3D"#000000" siz= e=3D"1"> </font></td> </tr> </table> <br> <table width=3D"550" border=3D"0" align=3D"center" cellpadding=3D"0" cells= pacing=3D"0" bgcolor=3D"#000000"> <tr> <td><img src=3D"http://www.linuxsvr.net/gb4/images/spacer.gif" width=3D= "550" height=3D"1" border=3D"0" alt=3D""></td> <td><img src=3D"http://www.linuxsvr.net/gb4/images/spacer.gif" width=3D= "1" height=3D"1" border=3D"0" alt=3D""></td> </tr> <tr> <td><img name=3D"genericmailer_r1_c1" src=3D"http://www.linuxsvr.net/g= b4/images/genericmailer_r1_c1.gif" width=3D"550" height=3D"50" border=3D"0= " alt=3D""></td> <td><img src=3D"http://www.linuxsvr.net/gb4/images/spacer.gif" width=3D= "1" height=3D"50" border=3D"0" alt=3D""></td> </tr> <tr> <td><img src=3D"http://www.linuxsvr.net/gb4/images/genericmailer_r2_c1= gif" alt=3D"" name=3D"genericmailer_r2_c1" width=3D"550" height=3D"86" bo= rder=3D"0" usemap=3D"#genericmailer_r2_c1Map"></td> <td><img src=3D"http://www.linuxsvr.net/gb4/images/spacer.gif" width=3D= "1" height=3D"86" border=3D"0" alt=3D""></td> </tr> <tr> <td><img name=3D"genericmailer_r3_c1" src=3D"http://www.linuxsvr.net/g= b4/images/genericmailer_r3_c1.gif" width=3D"550" height=3D"129" border=3D"= 0" alt=3D""></td> <td><img src=3D"http://www.linuxsvr.net/gb4/images/spacer.gif" width=3D= "1" height=3D"129" border=3D"0" alt=3D""></td> </tr> <tr> <td><div align=3D"justify"><font color=3D"#FFFFFF" size=3D"2" face=3D"= Verdana, Arial, Helvetica, sans-serif"><strong>To reach millions of potential clients... </strong><br> via newspapers, radio and television would cost a fortune. We can = design and deliver your message or advertisement to the greatest number o= f potential prospects, resulting in the greatest number of sales, for a fracti= on of the cost of conventional advertising.</font></div></td> <td><img src=3D"http://www.linuxsvr.net/gb4/images/spacer.gif" width=3D= "1" height=3D"75" border=3D"0" alt=3D""></td> </tr> <tr> <td><table width=3D"500" border=3D"0" align=3D"center" cellpadding=3D"= 0" cellspacing=3D"0"> <tr> <td width=3D"33%" bordercolor=3D"#000000" bgcolor=3D"#800000"> <p align=3D"center"><b><font face=3D"Arial">Messages Deliver= ed</font></b></td> <td width=3D"33%" align=3D"right" bordercolor=3D"#000000" bgco= lor=3D"#800000"> <p align=3D"center"><font face=3D"Arial"><b>General Internet= </b></font></td> <td width=3D"34%" align=3D"right" bordercolor=3D"#000000" bgco= lor=3D"#800000"> <p align=3D"center"><b><font face=3D"Arial">Target E-Mail Li= sts</font></b></td> </tr> <tr> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">250,000 Messages</font>= </b></td> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$ 1,000</font></b></td> <td width=3D"34%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$1,599</font></b></td> </tr> <tr> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">500,000 Messages</font>= </b></td> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$1,599</font></b></td> <td width=3D"34%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$2,499</font></b></td> </tr> <tr> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">1 Million Messages</fon= t></b></td> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$2,499</font></b></td> <td width=3D"34%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$3,999</font></b></td> </tr> <tr> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">2 Million Messages</fon= t></b></td> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$3,999</font></b></td> <td width=3D"34%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$4,999</font></b></td> </tr> <tr> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">3 Million Messages</fon= t></b></td> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$4,999</font></b></td> <td width=3D"34%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$7,999</font></b></td> </tr> <tr> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">5 Million Messages</fon= t></b></td> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$7,999</font></b></td> <td width=3D"34%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$12,999</font></b></td> </tr> <tr> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">10 Million Messages</fo= nt></b></td> <td width=3D"33%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$12,999</font></b></td> <td width=3D"34%" align=3D"center"><b> <font face=3D"Arial" color=3D"#FFFFFF">$18,999</font></b></td> </tr> </table></td> <td> </td> </tr> <tr> <td><img src=3D"http://www.linuxsvr.net/gb4/images/genericmailer_r5_c1= gif" alt=3D"" name=3D"genericmailer_r5_c1" width=3D"550" height=3D"60" bo= rder=3D"0" usemap=3D"#genericmailer_r5_c1Map"></td> <td><img src=3D"http://www.linuxsvr.net/gb4/images/spacer.gif" width=3D= "1" height=3D"60" border=3D"0" alt=3D""></td> </tr> </table> <br> <table cellpadding=3D0 cellspacing=3D0 border=3D0 height=3D24 width=3D600 = align=3D"center"> <tr> <td height=3D"24" width=3D"600" colspan=3D"2"> <font color=3D"#000000" size=3D"1" face=3D"Arial">This message is an advertisement. Your e-mail address is on file as a respondent to one of our offer. You have opted into our ,databas= e. We will continue to bring you valuable permission based messages on the products and services that interest you most u= nless you wish to </font> <font color=3D"#FFFFFF" size=3D"1" face=3D"Arial= "> <a href=3D"http://www.linuxsvr.net/help.html"> <font color=3D"#000000">decline</font></a></font><font color=3D"#00000= 0" size=3D"1" face=3D"Arial">. We process all requests immediately.</font></td> </tr> </table> <map name=3D"genericmailer_r2_c1Map"> <area shape=3D"rect" coords=3D"291,8,529,35" href=3D"http://www.linuxsvr= net/gb4/genericform.html"> </map> <map name=3D"genericmailer_r5_c1Map"> <area shape=3D"poly" coords=3D"230,4" href=3D"http://www.linuxsvr.net/gb= 4/genericform.html"> <area shape=3D"rect" coords=3D"244,4,549,19" href=3D"http://www.linuxsvr= net/gb4/genericform.html"> <area shape=3D"rect" coords=3D"298,18,509,61" href=3D"http://www.linuxsv= r.net/gb4/genericform.html"> </map> <IMG src=3D"http://www.flashmailz.net/where.cfm?id=3Dgb5" height=3D"1" wid= th=3D"1" border=3D0> </body> </html> |
From: Kevin J. B. <pyu...@sa...> - 2003-01-22 21:41:04
|
> > >From: Sebastien BLANC <Seb...@al...> >yet when I now have the py test file in another directory I then get the >following error: > >Traceback (innermost last): > File "unittest.py", line 712, in ? > File "unittest.py", line 663, in __init__ > File "unittest.py", line 691, in parseArgs > File "unittest.py", line 695, in createTests > File "unittest.py", line 458, in loadTestsFromNames > File "unittest.py", line 425, in loadTestsFromName >ImportError: no module named TestGemClient > >as if jython could not find my py file, though it is in the CP classpath >variable (no doubt on that). > > Jython finds .py files through sys.path. You can either add the directory to sys.path directly in your python code, or modify your jython registry to include the directory. kb |
From: Sebastien B. <Seb...@al...> - 2003-01-22 04:56:02
|
hi ! - I wonder if anybody has already though of way to generate documentation from a PyUnit test suite. idea would be to generate javadoc like information such as test suite name, name of each use case and description, purpose of each use case. I haven't heard about any javadoc like for python/jython, am I correct ? - about non regression testing, another usefull thing that would be to have a base TestCase class with a base test methods that would automatically be called by the tests method of any inherited class so that common code could be performed - such as benchmarking each testXXX for instance. I know I can do it now but this would be nice if this was in the default PyUnit package. thanx. seb. |
From: Sebastien B. <Seb...@al...> - 2003-01-22 04:12:52
|
Hello ! I'm just beginning with PyUnit and I'm using it with Jython (2.x). I actually don't know if my pb is specifically linked to the fact that I'm using jython. I can launch the following: %JAVA_HOME%/java %ACTIVATION% -classpath %CP% -Djava.security.policy=%JBOSS_HOME%/client/client.policy -Djava.security.manager -Dpython.home=%JYTHON_HOME% org.python.util.jython %JYTHON_LIB%/unittest.py TestGemClient.GemClientTestCase with success when the TestGemClient.py file is in the current directory where I launch this script, yet when I now have the py test file in another directory I then get the following error: Traceback (innermost last): File "unittest.py", line 712, in ? File "unittest.py", line 663, in __init__ File "unittest.py", line 691, in parseArgs File "unittest.py", line 695, in createTests File "unittest.py", line 458, in loadTestsFromNames File "unittest.py", line 425, in loadTestsFromName ImportError: no module named TestGemClient as if jython could not find my py file, though it is in the CP classpath variable (no doubt on that). thank you for help. seb. ___________________________ just for info I got another pb: using the sys.path.insert(0,'C:\data\jython-2.0\lib') instruction that did not work for me: Traceback (innermost last): (no code object) at line 0 IOError: File not found - unittest.py (The system cannot find the file specified) it was fixed by using a %JYTHON_LIB%/unittest.py path instead of direct unittest.py in the startup script. I'm on WIN2K with latest PyUnit release. |
From: Andrew D. <ad...@mi...> - 2003-01-12 18:24:22
|
Steve Purcell: > The framework relies on the test author making sure that individual test case > do not interfere with each other's results. In your case, sorting the test > cases by class name solves the problem, but I think the real difficulty is > how you have defined the tests. Yes, I think I do understand that philosophy. > If your current test cases interfere with each other due to the stateful > nature of the server, you should probably do one of the following things. > Firstly, you could arrange that the server is reset after every test case by > overriding the 'tearDown()' method of TestCase. Or secondly, you could merge > interdependent test cases into single test cases, such that they run > together. I have no control of the server, so I can't do the first case. I could merge the test cases together, but that doesn't feel right. I would be mixing quite different tests together in a test case. What I have are a set of independent test cases. If I run them in "live" mode, I do not have a problem, no matter the ordering of the test cases, nor even the order of the method calls in a test case. (I say that last because I noticed that unittest does sort the methods by name, so there is some enforcement of order -- just not one that matters to me.) On thinking about this, I realized the statefulness of the server really wasn't the problem. Consider the following tests, which is characteristic of what I'm doing. import unittest, testsupport, sys, os, urllib2 opener = None PICKLE_FILENAME = "test_websites.pickle" class TestPythonOrg(unittest.TestCase): def testMainPage(self): infile = opener("http://www.python.org") .... check for items on that page def testDocsPage(self): infile = opener("http://www.python.org/doc/") .... check for items on that page # Make sure the first hit from a goole search has # the the search text in the description. Totally # fake API. class TestGoogle(unittest.TestCase): def testSimpleSearch(self): form1 = parse_form(opener("http://www.google.com/") form1["q"] = "python" infile = form1.submit(opener = opener) results = parse_google_html_stream(infile) assert "spam" in results.group[0].text.lower() if __name__ == "__main__": s = os.environ.get("TEST_SOURCE", "PICKLE") if s == "PICKLE": opener = testsupport.OpenFromPickle(PICKLE_FILENAME) elif s == "LIVE": opener = urllib2.build_opener() elif s == "CREATE": opener = testsupport.CreatePickle(PICKLE_FILENAME) else: raise TypeError("Unknown TEST_SOURCE: %r" % (s,)) unittest.main() Notice that every single test is independent of the others. Inside of a test there is state. Now, it may be that some of these tests take a non-trivial amount of time to run -- perhaps 10 seconds. These add up, and it's part of the unittest testing philosophy that these tests be fast. (as in http://c2.com/cgi/wiki?OptimizingUnitTests ) I can agree with this. Getting validation in 5 seconds total as compared to 2 minutes really makes a difference. So what I did was provide something else which implements the URL opener interface. This reads the requests from a local file instead of calling the server. It's a lot faster, but the implementation assumes that all the methods are always called in the same order. What I want could work with the unittest interface if I told each method how to get the stored data for that specific method. Eg, here's one possible API def testSimpleSearch(self): opener = picklestore.fetch_for("testSimpleSearch") form1 = opener("http://www.google.com/") ... if __name__ == "__main__": if "PICKLE", picklestore = support.ReadPickleStore() if "LIVE", picklestore = support.NoPickleStore() if "CREATE", picklestore = support.CreatePickleStore() However, that makes the code a bit more complicated, since not only do I need that extra line, but I have to remember to name each test differently, even across all unit test instances. (I considered inspecting the stack to get the method and class name automatically, but that didn't work because some of the methods are shared in a base class.) There's some minor implementation annoyances too. Eg, I would either need random access to a named pickle string from a (akin to what the dbms give me .. hmmm..) or I need to read the whole data set into an in-memory dict. (only about 200K, so I guess that isn't too bad either.) Rather than do all that, I decided to try the simplest thing possible, and make the test cases be ordered. That was about 5-10 minutes vs. an hour or more of coding. Andrew da...@da... |
From: Dinu G. <gh...@da...> - 2003-01-12 13:59:13
|
FYI, I posted this recently on the pyobjc-mailinglist. It's about a 100% Python implementation of my previous Objective-C version of a Cocoa GUI test i/f on the Mac... Regard it as beta code as the tarball for v. 0.2 does not include anything else but code, which you have to build with Apple's ProjectBuilder. Dinu > Von: Dinu Gherman <gh...@da...> > Datum: Mi, 8. Jan 2003 10:56:31 Europe/Berlin > An: pyo...@li... > Betreff: [Pyobjc-dev] Pycotine now using PyObjC! ;-) > > Hi, > > this is really exciting... I once wrote a little Cocoa GUI to Steve > Purcell's PyUnit, following closely an existing Tkinter GUI. I've > "ported" Pycotine y'day to use PyObjC and put the new development > version 0.2 into my Starship cabin: > > http://python.net/crew/gherman/#pycotine > > The interesting bits are: it's still using NSTask to spawn an exter- > nal "tracking" TestRunner and an NSTimer to read the data from some > files and refresh the GUI during testing. Under Objective-C this > was the only way, but using Python only this can clearly be improv- > ed, maybe in the next version. Ideally, the info in the traceback > view would be clickable and able to take you to the source files... > maybe one day... ;-) > > To run it on your own test suites just add a function named either > suite() or makeSuite() that returns a unittest.TestSuite object to > your Python file and open/run it with Pycotine! The previous ver- > sion 0.1 contains some samples, too, which you can reuse with 0.2. > > I like the fact that Cocoa/PB/IB development is much faster with > Python than with Objective-C! It would be interesting to compare > to AppleScript, which I know little about... > > Enjoy, > > Dinu > > -- > Dinu C. Gherman > ...................................................................... > "Some are born great, some achieve greatness, and some hire public > relations officers." (Daniel J. Boorstin) > > _______________________________________________ > Pyobjc-dev mailing list > Pyo...@li... > https://lists.sourceforge.net/lists/listinfo/pyobjc-dev |
From: Steve P. <ste...@ya...> - 2003-01-12 10:50:38
|
On Saturday 11 January 2003 09:35, Andrew Dalke wrote: > I'm writing an interface to a web service. Because each request > takes a while (a couple of second) I wrote a wrapper which > catches all calls and results and saves them to a file. In that > way I can run my unit tests against the file, which is much > faster. (I retest against the main server too, but not as often.) > > The server is stateful, so I must do the same calls in the same > order. I assumed the order the tests were executed in a module > are always the same, so I simply pickled all socket input and > output to a file, expecting I could read the picked data out > in the same order it was put in. Hi Andrew, The framework relies on the test author making sure that individual test case do not interfere with each other's results. In your case, sorting the test cases by class name solves the problem, but I think the real difficulty is how you have defined the tests. If your current test cases interfere with each other due to the stateful nature of the server, you should probably do one of the following things. Firstly, you could arrange that the server is reset after every test case by overriding the 'tearDown()' method of TestCase. Or secondly, you could merge interdependent test cases into single test cases, such that they run together. ie. assuming you have two interdependent test cases: class MyFirstTestCase(unittest.TestCase): def testFirstThing(self): tryFirstThing() class MySecondTestCase(unittest.TestCase): def testSecondThing(self): trySecondThing() instead arrange the test code like this: class MyCombinedTestCase(unittest.TestCase): def testCombinedThing(self): tryFirstThing() trySecondThing() Hope that helps, -Steve -- Steve Purcell http://advogato.org/person/purcell |
From: Andrew D. <ad...@mi...> - 2003-01-11 08:42:49
|
I'm writing an interface to a web service. Because each request takes a while (a couple of second) I wrote a wrapper which catches all calls and results and saves them to a file. In that way I can run my unit tests against the file, which is much faster. (I retest against the main server too, but not as often.) The server is stateful, so I must do the same calls in the same order. I assumed the order the tests were executed in a module are always the same, so I simply pickled all socket input and output to a file, expecting I could read the picked data out in the same order it was put in. This doesn't appear to be the case. One of my modules fails a lot. I can build the log file from live data, then run it again some time later and it fails. All without me changing the code. Looking at the data suggests that the tests order changes. Looking at the code I think I pinned it down to TestLoader.loadTestsFromModule. It gets the list of test cases from the module but doesn't sort them. Here's my patch *** /usr/local/lib/python2.3/unittest.py Thu Jan 2 13:31:43 2003 --- unittest.py Sat Jan 11 01:12:41 2003 *************** *** 447,458 **** def loadTestsFromModule(self, module): """Return a suite of all tests cases contained in the given module""" ! tests = [] for name in dir(module): obj = getattr(module, name) if (isinstance(obj, (type, types.ClassType)) and issubclass(obj, TestCase)): ! tests.append(self.loadTestsFromTestCase(obj)) return self.suiteClass(tests) def loadTestsFromName(self, name, module=None): --- 447,460 ---- def loadTestsFromModule(self, module): """Return a suite of all tests cases contained in the given module""" ! klasses = [] for name in dir(module): obj = getattr(module, name) if (isinstance(obj, (type, types.ClassType)) and issubclass(obj, TestCase)): ! klasses.append(obj) ! klasses.sort(lambda x, y: cmp(x.__name__, y.__name__)) ! tests = map(self.loadTestsFromTestCase, klasses) return self.suiteClass(tests) def loadTestsFromName(self, name, module=None): Is my analysis correct? Is this an appropriate solution? I do know that with proper unit tests I am supposed to be able pull each one out and test them in any order. I could write the scaffolding to do that, but it's tedious. The above just works, so seems to me to be the right solution. I see elsewhere mention of the sort function to use, so the better solution might be klasses.sort(lambda x, y: self.sortTestMethodsUsing(x.__name__, y.__name__)) but these aren't methods, so I'll defer the decision to you all. Andrew da...@da... |
From: Paul F D. <pa...@pf...> - 2002-12-31 20:32:10
|
Was there any discussion of this interface? Sorry if there was and I = missed it. I don't think it is useful. The "places" concept is an unusual test and does not correspond to = normal practice for numerical analysis. The test is usually: abs(x-y) <=3D abstol + reltol * abs(y) where the two parameters abstol and reltol are absolute and relative tolerances. Note that in the case of small y this reduces to abs(x) <=3D abstol, and for y large relative to abstol, it is approximately = abs((x-y)/y) <=3D reltol. By forumulating it in this way there is no need for logic = tests on small y. The "places" formulation seems to be similar to reltol =3D=3D 0.0 and = abstol =3D 5*10**(-places-1) or something like that.=20 > -----Original Message----- > From: pyu...@li...=20 > [mailto:pyu...@li...] On=20 > Behalf Of pyu...@li... > Sent: Monday, December 30, 2002 12:04 PM > To: pyu...@li... > Subject: Pyunit-interest digest, Vol 1 #130 - 1 msg >=20 >=20 > Send Pyunit-interest mailing list submissions to > pyu...@li... >=20 > To subscribe or unsubscribe via the World Wide Web, visit > https://lists.sourceforge.net/lists/listinfo/pyunit-interest > or, via email, send a message with subject or body 'help' to > pyu...@li... >=20 > You can reach the person managing the list at > pyu...@li... >=20 > When replying, please edit your Subject line so it is more=20 > specific than "Re: Contents of Pyunit-interest digest..." >=20 >=20 > Today's Topics: >=20 > 1. forwarded message from rhe...@us...=20 > (Fred L. Drake, Jr.) >=20 > --__--__-- >=20 > Message: 1 > Date: Sun, 29 Dec 2002 18:22:14 -0500 > To: pyu...@li... > From: "Fred L. Drake, Jr." <fd...@ac...> > Subject: [Pyunit-interest] forwarded message from=20 > rhe...@us... >=20 >=20 > --yJq/i8nUPa > Content-Type: text/plain; charset=3Dus-ascii > Content-Description: message body and .signature > Content-Transfer-Encoding: 7bit >=20 >=20 > This was recently added to the unittest.py distributed with=20 > Python. It's probably of interest to others as well. >=20 >=20 > -Fred >=20 > --=20 > Fred L. Drake, Jr. <fdrake at acm.org> > PythonLabs at Zope Corporation >=20 >=20 > --yJq/i8nUPa > Content-Type: message/rfc822 > Content-Description: forwarded message > Content-Transfer-Encoding: 7bit >=20 > Return-path: <pyt...@py...> > Received: from bright09. (bright09-qfe0.icomcast.net=20 > [172.20.4.172]) by msgstore01.icomcast.net (iPlanet=20 > Messaging Server 5.2 HotFix 1.07 (built Nov 25 2002)) with=20 > ESMTP id <0H7...@ms...> for =20 > fdrake01@ims-ms-daemon; Sun, 29 Dec 2002 13:00:38 -0500 (EST) > Received: from mtain06 (bright-LB.icomcast.net [172.20.3.155]) > by bright09. (8.11.6/8.11.6) with ESMTP id gBTI0jr12288 for > <@msgstore01.icomcast.net:fdr...@co...>; Sun, > 29 Dec 2002 13:00:45 -0500 (EST) > Received: from mail.python.org (mail.python.org=20 > [12.155.117.29]) by mtain06.icomcast.net (iPlanet Messaging=20 > Server 5.2 HotFix 1.07 (built Nov 25 2002)) with ESMTP id=20 > <0H7...@mt...> for=20 > fdr...@co... (ORCPT fdr...@co...); Sun, 29=20 > Dec 2002 13:00:20 -0500 (EST) > Received: from alias2.acm.org ([199.222.69.92]) by=20 > mail.python.org with esmtp > (Exim 4.05) id 18ShjX-0005rC-00 for fd...@py...; Sun, > 29 Dec 2002 13:00:19 -0500 > Received: from mail.python.org ([12.155.117.29]) > by alias2.acm.org (ACM Email Forwarding Service) with ESMTP=20 > id CRY73883; Sun, 29 Dec 2002 13:00:19 -0500 > Received: from localhost.localdomain ([127.0.0.1]=20 > helo=3Dmail.python.org) > by mail.python.org with esmtp (Exim 4.05) id=20 > 18ShjV-0005qd-00; Sun, > 29 Dec 2002 13:00:17 -0500 > Received: from sc8-sf-sshgate.sourceforge.net > ([66.35.250.220] helo=3Dsc8-sf-netmisc.sourceforge.net) > by mail.python.org with esmtp (Exim 4.05) > id 18Shii-0005p0-00 for pyt...@py...; Sun, > 29 Dec 2002 12:59:28 -0500 > Received: from sc8-pr-cvs1-b.sourceforge.net > ([10.5.1.7] helo=3Dsc8-pr-cvs1.sourceforge.net) > by sc8-sf-netmisc.sourceforge.net with esmtp (Exim 3.36=20 > #1 (Debian)) > id 18Shih-0000KO-00 for <pyt...@py...>; Sun, > 29 Dec 2002 09:59:27 -0800 > Received: from localhost ([127.0.0.1]=20 > helo=3Dsc8-pr-cvs1.sourceforge.net) > by sc8-pr-cvs1.sourceforge.net with esmtp (Exim 3.22 #1=20 > (Debian)) > id 18Shig-0004pw-00 for <pyt...@py...>; Sun, > 29 Dec 2002 09:59:26 -0800 > Errors-to: pyt...@py... > Message-id: <E18...@sc...> > Precedence: bulk > X-BeenThere: pyt...@py... > X-Spam-Status: No, > hits=3D-0.3 required=3D5.0=20 > tests=3DNO_REAL_NAME,PATCH_CONTEXT_DIFF,SPAM_PHRASE_00_01 > X-Spam-Level: > X-Spam-Status: No, > hits=3D-5.4 required=3D5.0=20 > tests=3DBODY_PYTHON_ZOPE,KNOWN_MAILING_LIST,NO_REAL_NAME,PATCH_C > ONTEXT_DIFF,SPAM_PHRASE_00_01,SUBJ_PYTHON_ZOPE > X-Spam-Level: > X-Mailman-Version: 2.0.13 (101270) > List-Post: <mailto:pyt...@py...> > List-Subscribe:=20 > <http://mail.python.org/mailman/listinfo/python-checkins>, > <mailto:pyt...@py...?subject=3Dsubscribe> > List-Unsubscribe:=20 > <http://mail.python.org/mailman/listinfo/python-checkins>, > <mailto:pyt...@py...?subject=3Dunsubscribe> > List-Archive: <http://mail.python.org/pipermail/python-checkins/> > List-Help: <mailto:pyt...@py...?subject=3Dhelp> > List-Id: Check-in messages from the Python maintainers =20 > <python-checkins.python.org> > Original-recipient: rfc822;fdr...@co... > From: rhe...@us... > Sender: pyt...@py... > To: pyt...@py... > Subject: [Python-checkins] python/dist/src/Lib unittest.py,1.20,1.21 > Date: Sun, 29 Dec 2002 09:59:26 -0800 >=20 > Update of /cvsroot/python/python/dist/src/Lib > In directory sc8-pr-cvs1:/tmp/cvs-serv17844/Lib >=20 > Modified Files: > unittest.py=20 > Log Message: > Incorporate Skip's suggestion to use SciPy's validation test=20 > near equality. Note, there is another flavor that compares=20 > to a given number of significant digits rather than decimal=20 > places. If there is a demand, that could be added at a later date. >=20 >=20 > Index: unittest.py=20 > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > RCS file: /cvsroot/python/python/dist/src/Lib/unittest.py,v > retrieving revision 1.20 > retrieving revision 1.21 > diff -C2 -d -r1.20 -r1.21 > *** unittest.py 30 Sep 2002 19:25:56 -0000 1.20 > --- unittest.py 29 Dec 2002 17:59:23 -0000 1.21 > *************** > *** 301,307 **** > --- 301,335 ---- > (msg or '%s =3D=3D %s' % (`first`, `second`)) > =20 > + def failUnlessAlmostEqual(self, first, second,=20 > places=3D7, msg=3DNone): > + """Fail if the two objects are unequal as=20 > determined by their > + difference rounded to the given number of decimal places > + (default 7) and comparing to zero. > +=20 > + Note that decimal places (from zero) is usually=20 > not the same > + as significant digits (measured from the most=20 > signficant digit). > + """ > + if round(second-first, places) !=3D 0: > + raise self.failureException, \ > + (msg or '%s !=3D %s within %s places' % (`first`,=20 > + `second`, `places` )) > +=20 > + def failIfAlmostEqual(self, first, second, places=3D7, = msg=3DNone): > + """Fail if the two objects are equal as determined by their > + difference rounded to the given number of decimal places > + (default 7) and comparing to zero. > +=20 > + Note that decimal places (from zero) is usually=20 > not the same > + as significant digits (measured from the most=20 > signficant digit). > + """ > + if round(second-first, places) =3D=3D 0: > + raise self.failureException, \ > + (msg or '%s =3D=3D %s within %s places' % = (`first`,=20 > + `second`, `places`)) > +=20 > assertEqual =3D assertEquals =3D failUnlessEqual > =20 > assertNotEqual =3D assertNotEquals =3D failIfEqual > +=20 > + assertAlmostEqual =3D assertAlmostEquals =3D = failUnlessAlmostEqual > +=20 > + assertNotAlmostEqual =3D assertNotAlmostEquals =3D = failIfAlmostEqual > =20 > assertRaises =3D failUnlessRaises >=20 >=20 >=20 > _______________________________________________ > Python-checkins mailing list > Pyt...@py...=20 > http://mail.python.org/mailman/listinfo/python> -checkins >=20 >=20 > --yJq/i8nUPa-- >=20 >=20 >=20 > --__--__-- >=20 >=20 > _______________________________________________ > Pyunit-interest mailing list Pyu...@li... > https://lists.sourceforge.net/lists/listinfo/pyunit-interest >=20 >=20 > End of Pyunit-interest Digest >=20 |
From: Fred L. D. Jr. <fd...@ac...> - 2002-12-29 23:23:24
|
This was recently added to the unittest.py distributed with Python. It's probably of interest to others as well. -Fred -- Fred L. Drake, Jr. <fdrake at acm.org> PythonLabs at Zope Corporation |
From: Steve P. <ste...@ya...> - 2002-12-19 12:08:15
|
On Thursday 19 December 2002 04:04, Timothy Grant wrote: > Just curious why when tests are run the entire doc string is not printed? I > almost feel as if I would do better naming my testXXXX methods with the > full name of the test instead. The *first line* of the testXX method doc strings are used as the short descriptions of test cases by default. If you're not seeing your doc strings, check that the short description is in the first line. Best wishes, -Steve -- Steve Purcell http://advogato.org/person/purcell |