On Thu, Jul 10, 2014 at 8:35 PM, Russell Keith-Magee <[email protected]> wrote: > > On Fri, Jul 11, 2014 at 3:34 AM, Larry Martell <[email protected]> > wrote: >> >> I am trying to upgrade a site to 1.6. I read the change notes about >> the tests now having to start with test. >> >> My project's structure is this: >> >> myproj/app/appname/tests >> >> and in that dir was a file called EventLog.py, and in that file a >> function called EventLogTest >> >> My __init__ had: >> >> from myproj.app.appname.tests.EventLog import EventLogTest >> >> I would run the test with: >> >> manage.py test appname.EventLogTest >> >> I reanmed EventLog.py to testEventLog.py, and I also changed it in the >> __init__ file to: >> >> from myproj.app.appname.tests.testEventLog import EventLogTest >> >> Then I tried: >> >> manage.py test appname.EventLogTest >> >> ImportError: No module named appname >> >> manage.py test app.appname.EventLogTest >> >> ImportError: No module named app >> >> manage.py test myproj.app.appname.EventLogTest >> >> AttributeError: 'module' object has no attribute 'EventLogTest' >> >> manage.py test myproj.app.appname.tests.EventLogTest >> >> AttributeError: 'module' object has no attribute 'tests' >> >> >> What simple, stupid thing I am doing wrong here? What do I have to do >> to run my tests in 1.6? > > > It depends where you're coming from, and how long you need your project to > last. > > If you've got a working Django 1.5 project, and you just need to get it into > 1.6 as fast as possible, then just add > > TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner' > > to your settings file, and you're done. Your 1.6 test suite will run exactly > the same as it does in 1.5, and there won't be any change to the way your > test suite runs - no changes to the way the tests are found, and no change > to the way you execute them. That means: > > * If you've got a tests *package*, you'll have to put a bunch of imports in > the tests/__init__.py module so that all the test classes are sitting in the > appname.tests namespace > > * When you run a test, you run one of: > - manage.py test appname > - manage.py test appname.TestClassName > - manage.py test appname.TestClassName.test_this_feature > > However, if you want to upgrade to the "new" behaviour in 1.6, you need to > make other changes. > > The "new" test runner doesn't require the imports in tests/__init__.py. It > does automated discovery of file in those submodules named test*.py. If your > tests aren't in files with "discoverable" names, you'll need to either > rename the files (and directories), or manually point manage.py test at the > right filenames. > > If you've got a newly-structured test suite, then invoking tests is slightly > different, too: > - manage.py test appname > - manage.py test appname.tests.test_submodule.TestClassName > - manage.py test > appname.tests.test_submodule.TestClassName.test_this_feature > > That is, you give the fully qualified Python module name of a test class, > not just the 'app name.classname' simplification. > > See > https://docs.djangoproject.com/en/dev/topics/testing/overview/#running-tests > for more details, including details of how to include files other than > test_*. > > As an aside - if you want your project to be long lived, you'll *eventually* > need to make these naming changes to your test suite. It's just a question > of whether you need to do it *right now*. The old approach will still work > in 1.6; it will also work in 1.7, but will be more noisy. In 1.8, the > DjangoTestSuiteRunner will be removed completely. So, if you want your > project test suite to last until Django 1.8 and beyond, you'll ultimately > need to make these changes. > > I hope that helps.
I appreciate the detailed reply, and I think I understand all this, but I still cannot get my tests to run. Let's look at one test. My tests are in this dir: /usr/local/motor/motor/app/cdsem/tests A file with a test is called: testEventLog.py In that file is a class EventLogTest I am running manage.py from /usr/local/motor How would I run that test? I have tried: manage.py test app.cdsem.tests.testEventLog manage.py test app.cdsem.tests.testEventLog.EventLogTest manage.py test cdsem.tests.testEventLog manage.py test cdsem.tests.testEventLog.EventLogTest manage.py test motor.app.cdsem.tests.testEventLog manage.py test motor.app.cdsem.tests.testEventLog.EventLogTest manage.py test tests.testEventLog.EventLogTest And none of them find the test. What am I doing wrong? Thanks! -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CACwCsY7D_oXT20nLGtbbsFZrCLnZNqZxTdFGfLpvx2iiV3GXjQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

