Thanks Russ, that's helpful. I would think signals would ideally be a solution for this, no? E.g., a setup and teardown signal that fired in setup_test_environment() and teardown_test_environment(), respectfully. I was actually hoping to find this already implemented when I checked the documentation for signals.
On Sep 16, 5:13 pm, Russell Keith-Magee <[email protected]> wrote: > On Fri, Sep 17, 2010 at 6:15 AM, Jim D. <[email protected]> wrote: > > I have some code that calls a third-party API in a Django application > > I'm working on, which could be triggered at various points throughout > > a project. I would like to ensure that the API itself doesn't actually > > get called at all during test mode, much the same way that Django > > itself swaps out the email backend during test mode to ensure emails > > don't actually get sent during testing. > > > The key point here is I need to ensure the real library isn't being > > called anywhere during the tests being run throughout the suite, not > > just in the test code I'm writing specifically for the application > > itself. > > > Is there a clean way to do this? I notice that Django disables the > > email and a few other settings in the setup_test_environment() > > function. I'd like to do something similar, but the only idea I've > > come up with so far is to create a custom test runner that extends the > > default setup_test_environment() method and adds a few items of my > > own. While this would work, it would depend on the project using a > > custom test runner. > > > Other ideas include a crazy hack like this guy has proposed: > >http://www.thebitguru.com/blog/view/246-Using%20custom%20settings%20i... > > > Surely others of you have had to ensure a given library isn't called > > during testing or development (e.g. if you were implementing a payment > > processor API, you wouldn't want to actually call that library during > > tests). Am I just missing a totally obvious way to accomplish this? > > A custom test runner would be the usual way to accomplish this, and as > of Django 1.2, it's a lot easier to write one because the test runner > is class based. On a smaller scale, you could also accomplish this > using a setUp()/tearDown() pair in individual test cases. > > The "if TEST" approach advocated by 'thebitguru' will certainly work, > but it's not a pattern that I'd like to see take hold in Django > itself. This approach essentially introduces branches into your main > codebase, so now you need to be testing whether or not your code is > hitting the right branches -- in theory, it is possible that your > production code could activate the "if TEST' branch, so you need to > test that this won't happen. > > If you have a suggestion of a better way to provide setup/teardown > hooks, I'd be happy to hear it. > > Yours, > Russ Magee %-) -- You received this message because you are subscribed to the Google Groups "Django 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/django-users?hl=en.

