How to spy on Mock-wrapped method calls in Python

You have a class whose API you want to verify:

[python] class Class_A(object):
def method_X(self):
self.method_Y()

def method_Y(self):
pass
[/python]

You write the following test fully expecting it to pass. Alas, the method_Y assertion fails.

[python] def test_class_a(self):
obj = Class_A()
mock = MagicMock(spec_set=obj, wraps=obj)

mock.method_X()
mock.method_Y.assert_called_once_with()
[/python]

This is because the Python Unittest Mock, while wrapping mock.method_X(), Mock uses obj in the __self__ of the method_Y binding. As a result the self value passed to method_X is that of the obj and not mock and the call to method_Y is therefore invisible to the Mock.

Continue reading “How to spy on Mock-wrapped method calls in Python”

Dell Seagate SSHD Firmware Update on Linux

I am a happy owner of a Dell Precision M4800.

Just kidding – I don't remember ever having so many problems with a PC hardware platform on Linux.

Continue reading “Dell Seagate SSHD Firmware Update on Linux”