| ========== | |
| 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 | |