Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

unittest inconsistent

0 views
Skip to first unread message

Matt Haggard

unread,
Jan 5, 2010, 7:14:49 PM1/5/10
to
Can anyone tell me why this test fails?

http://pastebin.com/f20039b17

This is a minimal example of a much more complex thing I'm trying to
do. I'm trying to hijack a function and inspect the args passed to it
by another function.

The reason the 'Tester' object has no attribute 'arg1' is because
"self" still refers to the object made for testA.

Phlip

unread,
Jan 5, 2010, 8:50:00 PM1/5/10
to

I hope someone else can spot the low-level reason...

...but why aren't you using http://pypi.python.org/pypi/mock/ ? Look
up its patch_object facility...

André

unread,
Jan 5, 2010, 8:57:53 PM1/5/10
to

Quick answer: change faketest.py as follows:

#--------------------------------------------------
# faketest.py
#--------------------------------------------------

#from importme import render
import importme

def run(somearg):
return importme.render(somearg)

=========
A long answer, with explanation, will cost you twice as much ;-)
(but will have to wait)

André

Peter Otten

unread,
Jan 6, 2010, 4:01:42 AM1/6/10
to
André wrote:

Or you figure it out yourself staring at

>>> import os
>>> from os import rename
>>> os.rename = 42
>>> rename
<built-in function rename>
>>> os.rename
42

from module import name

binds the object referred to by module.name to the name variable in the
current module. You can think of it as a shortcut for

import module
name = module.name
del module

When you later rebind

import module
module.name = something_else

the reference in the current module isn't magically updated to point to
something_else.

Peter

Chris Withers

unread,
Jan 12, 2010, 3:15:43 AM1/12/10
to Phlip, pytho...@python.org
Phlip wrote:
>> The reason the 'Tester' object has no attribute 'arg1' is because
>> "self" still refers to the object made for testA.
>
> I hope someone else can spot the low-level reason...
>
> ...but why aren't you using http://pypi.python.org/pypi/mock/ ? Look
> up its patch_object facility...

Indeed, I love mock, although I prefer testfixture replace decorator
and/or context manager for installing and removing them:

http://packages.python.org/testfixtures/mocking.html

cheers,

Chris

--
Simplistix - Content Management, Batch Processing & Python Consulting
- http://www.simplistix.co.uk

0 new messages