如何模拟从一个本地协程到另一个使用的异步调用unittest.mock.patch?
我目前有一个很尴尬的解决方案:
class CoroutineMock(MagicMock):
def __await__(self, *args, **kwargs):
future = Future()
future.set_result(self)
result = yield from future
return result
Run Code Online (Sandbox Code Playgroud)
然后
class TestCoroutines(TestCase):
@patch('some.path', new_callable=CoroutineMock)
def test(self, mock):
some_action()
mock.assert_called_with(1,2,3)
Run Code Online (Sandbox Code Playgroud)
这有效,但看起来很难看.是否有更多的pythonic方式来做到这一点?
我需要将一个对象附加到会话,使其与db中持久化的对象不同.(更容易用代码解释):
session.query(type(some_object)).filter_by(id=some_object.id).one()
Run Code Online (Sandbox Code Playgroud)
有更合适的方法吗?
session.add(some_object)不起作用,因为具有此类ID的实体已经可以附加到此会话,并且object = session.merge(some_object)对我不起作用,因为它从分离的副本转换状态(如果我使object.name ='asdfasdf'这些更改将在合并后挂起宾语)
编辑:
我找到了一点不那么丑陋的方式:
some_object = session.merge(some_object)
session.refresh(some_object)
Run Code Online (Sandbox Code Playgroud)
但是在一次通话中有没有办法解决这个问题?