On 9 September 2016 at 01:03, Pete Vander Giessen < pete.vandergies...@canonical.com> wrote:
> Hi All, > > > Stuart Bishop wrote: > > The tearDown method could reset the mock easily enough. > > If only it were that simple :-) > > To patch imports, the harness was actually providing a context that you > could use the wrap the imports at the top of your test module. That solved > the immediate issue of executing imports without errors, but it created a > very complex situation when you went to figure out which references to > cleanup or update when you wanted to reset mocks. You also weren't able to > clean them up in tearDown, or even tearDownClass, because you had to handle > the situation where you had multiple test classes in a module. > > One workaround is to do your imports inside of the setUp for a test. That > didn't feel like the correct way to do things in a library meant for > general use, where I'd prefer to stick to things that don't make Guido sad. > I wouldn't necessarily object to the technique if it came up in a code > review for a specific charm, though :-) > I'm thinking you insert a MagicMock into sys.modules instead of an import statement (this is how we do it in the telegraf charm, and I'm sure helpers could make this nicer): # Mock layer modules import charms promreg = MagicMock() charms.promreg = promreg sys.modules['charms.promreg'] = promreg To reset, you just iterate over sys.modules and reset everything that is a MagicMock (or anything with a reset_mock() method). There is no need to figure which to reset, since you want all of them reset every test to preserve test isolation. I haven't actually tried this bit yet. If you are using the standard Python unittest feature set, I think you would need a TestCase subclass to do the reset. If you are using py.test, I think it has features that can do this magically. A moduleTearDown would be required if you want to remove the mocks from sys.modules (or py.test magic). But I don't think we need to bother. -- Stuart Bishop <stuart.bis...@canonical.com>
-- Juju mailing list Juju@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/juju