def METHOD_NAME(self):
    patch = monkeypatch.Patch([(Class, 'class_method', patched_clsmethod)])
    instance = Class()
    self.assertEqual(instance.class_method(), (Class, 'clean'))
    self.assertEqual(Class.class_method(), (Class, 'clean'))
    self.assertEqual(Class().class_method(), (Class, 'clean'))
    old = Class.class_method
    patch.apply()
    try:
        self.assertEqual(instance.class_method(), (Class, 'patched'))
        self.assertEqual(Class.class_method(), (Class, 'patched'))
        self.assertEqual(Class().class_method(), (Class, 'patched'))
        self.assertEqual(getattr(Class.class_method, '__self__'), Class)
    finally:
        patch.revert()
    self.assertEqual(instance.class_method(), (Class, 'clean'))
    self.assertEqual(Class.class_method(), (Class, 'clean'))
    self.assertEqual(Class().class_method(), (Class, 'clean'))
    self.assertEqual(old, Class.class_method)
    self.assertEqual(getattr(Class.class_method, '__self__'), Class)