The confusion is not with doctests, but with external unit tests
created with the 'unittest' module. Could you please post your
testControllerDefault.py so I can see what you're doing different from
me?
Please allow me to elaborate on my problems running unit tests with
web2py. Here is my (very minimal) example unit test file:
=================
#!/usr/bin/python
import unittest
class TestListActiveGames(unittest.TestCase):
def testListActiveGames(self):
print "This line should print out"
if __name__ == "__main__":
unittest.main()
=================
If the test is actually run, the command line will show "This line
should print out".
The file is stored at <web2py_root>/applications/api/tests/test.py. My
current working directory is <web2py_root>.
I run the following command:
=======
python web2py.py -S api -M -R applications/api/tests/test.py
=======
And I get this output:
================
web2py Enterprise Web Framework
Created by Massimo Di Pierro, Copyright 2007-2010
Version 1.75.4 (2010-02-18 20:57:56)
Database drivers available: pysqlite
================
The output does not contain the line, "This line should print out",
indicating the unit tests are not being run.
I did some debugging and found that the last two lines, which are
typical for unittest files, do not work when the file is executed by
web2py. Rather than being equal to "__main__", which indicates the
file is being executed from the command line, __name__ is equal to
"__builtin__". I modified the code to work anyway:
================
#!/usr/bin/python
import unittest
class TestListActiveGames(unittest.TestCase):
def testListActiveGames(self):
print "This line should print out"
unittest.main()
================
Now, I receive this output:
=======
web2py Enterprise Web Framework
Created by Massimo Di Pierro, Copyright 2007-2010
Version 1.75.4 (2010-02-18 20:57:56)
Database drivers available: pysqlite2
option -S not recognized
Usage: web2py.py [options] [test] [...]
Options:
-h, --help Show this message
-v, --verbose Verbose output
-q, --quiet Minimal output
Examples:
web2py.py - run default set of tests
web2py.py MyTestSuite - run suite 'MyTestSuite'
web2py.py MyTestCase.testSomething - run
MyTestCase.testSomething
web2py.py MyTestCase - run all 'test*' test
methods
in MyTestCase
=======
More debugging revealed that this is output by unittest.main(). The
unittest module tries to parse arguments on the command line, sees the
"-S" option that was passed to web2py.py, says "I don't know what '-S'
means!", and exits.
To coerce unittest.main() to continue running, I made a quick hack to
shell.py to strip out the extra command line arguments in sys.argv
before test.py is run:
==== gluon/shell.py, insert line 165 ====
sys.argv = sys.argv[5:]
===================
I call the test file again, with the same command as before, and get
this:
================
web2py Enterprise Web Framework
Created by Massimo Di Pierro, Copyright 2007-2010
Version 1.75.4 (2010-02-18 20:57:56)
Database drivers available: pysqlite2
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
================
The line, "This line should be printed out", is still not printed.
Stepping through the code with Python's debugging module, pdb, shows
that unittest.main() thinks it's being called from web2py.py, and not
from test.py. unittest.main() looks for tests to run in web2py.py,
finds none, and quits.
So now I'm stuck: the unittest module expects test.py to be run as a
standalone script, but instead test.py is being executed within the
scope of web2py.py, which is confusing the unittest module in several
ways.
On Feb 24, 1:02 pm, Thadeus Burgess <[email protected]> wrote:
> If I create a unittest
>
> init/tests/testControllerDefault.py
>
> and run the following command line
>
> python web2py.py -S <yourapp> -M -R
> applications/init/tests/testControllerDefault.py
>
> My test is ran.
>
> I don't see what is so confusing.
>
> -Thadeus
>
> On Wed, Feb 24, 2010 at 12:01 PM, Thadeus Burgess <[email protected]>
> wrote:
> > consider controllers/default.py
>
> > def index():
> > """
> >>>> db(db.people.id > 0).count()
> > '35'
> > """
> > return db(db.people.id > 0).count()
>
> > now when I run
>
> > `python web2py.py -T init/default/index`
>
> > produces my doctest.
>
> > -Thadeus
>
> > On Wed, Feb 24, 2010 at 2:28 AM, Jon Romero <[email protected]> wrote:
> >> So, any idea/hint how to do it? Do we need a patch?
>
> >> On Feb 23, 10:40 pm, spiffytech <[email protected]> wrote:
> >>> I'm running the latest version, 1.75.4.
>
> >>> On Feb 23, 11:35 am, Thadeus Burgess <[email protected]> wrote:
>
> >>> > What version of web2py are you running?
>
> >>> > What is the output of ``python web2py.py --help``
>
> >>> > -Thadeus
>
> >>> > On Tue, Feb 23, 2010 at 5:23 AM, Jon Romero <[email protected]> wrote:
> >>> > > ust put a prin "Hello world!" inside the test file, everything
> >>> > > works ok. So, I suppose that this file tries to load AGAIN the web2py
> >>> > > environment and there is
> >>> > > some sort of mi
>
> >> --
> >> You received this message because you are subscribed to the Google Groups
> >> "web2py-users" group.
> >> To post to this group, send email to [email protected].
> >> To unsubscribe from this group, send email to
> >> [email protected].
> >> For more options, visit this group
> >> athttp://groups.google.com/group/web2py?hl=en.
--
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en.