def test_close_position_error(): """ 测试关闭头寸出错的情况 """ flag = [] def onClosePositionError(order, errorId, errorMsg, position=None): flag.append([order, errorId, errorMsg, position]) trader = Trader() trader.bind('onClosePositionError', onClosePositionError) # 创建一个头寸并关闭它 openOrder = trader.openPosition(getDefaultInstrumentId(), 'buy', 1) position = openOrder.position trader.onPositionOpened(openOrder, position) assert position.state == 'open' closeOrder = trader.closePosition(position.id) position = ModelPosition.objects.get(id=position.id) # 模拟头寸创建失败事件 errorId = -1 errorMsg = u'测试' trader.onClosePositionError(closeOrder, errorId, errorMsg, position) assert closeOrder.state == 'error' assert closeOrder.finishTime is not None assert closeOrder.errorId == errorId assert closeOrder.errorMsg == errorMsg assert position.state == 'open' assert position.closeTime is None # 检查事件正常传递 assert len(flag) == 1 assert flag[0][0] == closeOrder assert flag[0][1] == errorId assert flag[0][2] == errorMsg assert flag[0][3] == position