| ========== |
| Sentinel |
| ========== |
| |
| |
| .. currentmodule:: mock |
| |
| .. testsetup:: |
| |
| class ProductionClass(object): |
| def something(self): |
| return self.method() |
| |
| class Test(unittest2.TestCase): |
| def testSomething(self): |
| pass |
| self = Test('testSomething') |
| |
| |
| .. data:: sentinel |
| |
| The ``sentinel`` object provides a convenient way of providing unique |
| objects for your tests. |
| |
| Attributes are created on demand when you access them by name. Accessing |
| the same attribute will always return the same object. The objects |
| returned have a sensible repr so that test failure messages are readable. |
| |
| |
| .. data:: DEFAULT |
| |
| The `DEFAULT` object is a pre-created sentinel (actually |
| `sentinel.DEFAULT`). It can be used by :attr:`~Mock.side_effect` |
| functions to indicate that the normal return value should be used. |
| |
| |
| Sentinel Example |
| ================ |
| |
| Sometimes when testing you need to test that a specific object is passed as an |
| argument to another method, or returned. It can be common to create named |
| sentinel objects to test this. `sentinel` provides a convenient way of |
| creating and testing the identity of objects like this. |
| |
| In this example we monkey patch `method` to return |
| `sentinel.some_object`: |
| |
| .. doctest:: |
| |
| >>> real = ProductionClass() |
| >>> real.method = Mock(name="method") |
| >>> real.method.return_value = sentinel.some_object |
| >>> result = real.method() |
| >>> assert result is sentinel.some_object |
| >>> sentinel.some_object |
| sentinel.some_object |
| |
| |