Comments (2)
In python3, this code works.
In python2, it will cause the error below.
Traceback (most recent call last):
File "test.py", line 10, in <module>
print(stub()) # error
File "/Users/kir/python-dev/sinon/sinon/lib/base.py", line 135, in __call__
return self._get_wrapper()(*args, **kwargs)
TypeError: unbound method wrapped() must be called with A instance as first argument (got nothing instead)
from sinon.
I suspect that this bug may have existed for a long time, since it's kind of the opposite of the issue that required the dirty hack in the first place.
The problem is that when trying to directly execute a class method (a class, not an object), Python is expecting the self
argument as the first parameter to the function call.
Hence, the following code passes:
class A:
def B(self):
return 5
stub = sinon.stub(A, 'B')
stub(A()) # success!
This is because, as a language feature of Python, if you're calling the function B
directly without an object then you must supply an instance. e.g.
o = A()
A.B(o) # returns 5
I'm not sure what you think the right thing to do would be in this case? One could consider the current behaviour of Sinon.PY to be correct. However, I do find it counter-intuitive (confusing) to need to pass an object instance into the stub
.
from sinon.
Related Issues (20)
- Chained onCall and withArgs doesn't work HOT 4
- Immediately creating Stub replacement is deprecated HOT 4
- onCall(...).withArgs(...) not allowed HOT 1
- Combined withArgs and onCall not working correctly
- Conditions should not persist across lines
- Precedence of onCall vs withArgs vs returns not correct HOT 1
- call count reset when using returns or throws HOT 2
- FSM Table
- Code duplication
- Get rid of target "dirty hack" HOT 2
- Cannot chain throws HOT 4
- Class-based method stub cannot chain throws
- Module-based stub cannot chain throws
- Should not be able to restore an anonymous (pure) stub HOT 3
- base.py exposes protected attributes
- Calling stub.reset() makes stub no longer override return value HOT 1
- Cannot stub logging with open stream HOT 1
- Nice-to-have: stubbing constructors
- Deprecation warning due to invalid escape sequences
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sinon.