make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); echo "=== 物品解冻异常抛出测试 ===\n\n"; try { DB::beginTransaction(); $userId = 1001; $itemId = 1; echo "1. 测试不存在的冻结日志\n"; try { $unfreezeResult = ItemService::unfreezeItem(99999); echo " ❌ 意外成功\n"; } catch (Exception $e) { echo " ✅ 预期异常: " . $e->getMessage() . "\n"; } echo "\n2. 准备测试数据\n"; // 添加物品 $addResult = ItemService::addItem($userId, $itemId, 50); echo " 添加物品成功\n"; // 冻结物品 $freezeResult = ItemService::freezeItem( $userId, $itemId, null, 30, FREEZE_REASON_TYPE::TRADE_ORDER->value, [ 'source_id' => 12345, 'source_type' => 'test_order', 'operator_id' => 1 ] ); $freezeLogId = $freezeResult['frozen_items'][0]['freeze_log_id']; echo " 冻结成功,日志ID: {$freezeLogId}\n"; echo "\n3. 测试部分消耗后数量不足的解冻异常\n"; // 部分消耗冻结物品 ItemService::consumeItem($userId, $itemId, null, 20, ['include_frozen' => true, 'source_type' => 'test_consume', 'source_id' => 67890]); echo " 消耗20个冻结物品成功\n"; // 消耗大部分可用物品,使其不足以补足 ItemService::consumeItem($userId, $itemId, null, 15, ['include_frozen' => false, 'source_type' => 'test_consume_available', 'source_id' => 67891]); echo " 消耗15个可用物品成功\n"; // 现在状态:冻结10个(30-20),可用5个(20-15) // 解冻需要补足20个,但只有5个可用 // 测试原始解冻方法异常 echo " 测试原始解冻方法:\n"; try { $unfreezeResult = ItemService::unfreezeItem($freezeLogId); echo " ❌ 意外成功\n"; } catch (Exception $e) { echo " ✅ 预期异常: " . $e->getMessage() . "\n"; } // 测试安全解冻方法异常 echo " 测试安全解冻方法:\n"; try { $safeUnfreezeResult = ItemService::safeUnfreezeItem($freezeLogId); echo " ❌ 意外成功\n"; } catch (Exception $e) { echo " ✅ 预期异常: " . $e->getMessage() . "\n"; } echo "\n4. 测试完全消耗后的解冻异常\n"; // 完全消耗冻结物品 ItemService::consumeItem($userId, $itemId, null, 10, ['include_frozen' => true, 'source_type' => 'test_consume_all_frozen', 'source_id' => 67892]); echo " 完全消耗冻结物品成功\n"; // 测试原始解冻方法(完全消耗后) echo " 测试原始解冻方法(完全消耗后):\n"; try { $unfreezeResult2 = ItemService::unfreezeItem($freezeLogId); echo " ❌ 意外成功\n"; } catch (Exception $e) { echo " ✅ 预期异常: " . $e->getMessage() . "\n"; } // 测试安全解冻方法(完全消耗后) echo " 测试安全解冻方法(完全消耗后):\n"; try { $safeUnfreezeResult2 = ItemService::safeUnfreezeItem($freezeLogId); echo " ❌ 意外成功\n"; } catch (Exception $e) { echo " ✅ 预期异常: " . $e->getMessage() . "\n"; } echo "\n5. 测试冻结物品不存在的异常\n"; // 手动删除冻结物品记录来模拟数据不一致 DB::table('item_users')->where('frozen_log_id', $freezeLogId)->where('is_frozen', true)->delete(); echo " 手动删除冻结物品记录\n"; // 测试原始解冻方法(冻结物品不存在) echo " 测试原始解冻方法(冻结物品不存在):\n"; try { $unfreezeResult3 = ItemService::unfreezeItem($freezeLogId); echo " ❌ 意外成功\n"; } catch (Exception $e) { echo " ✅ 预期异常: " . $e->getMessage() . "\n"; } // 测试安全解冻方法(冻结物品不存在) echo " 测试安全解冻方法(冻结物品不存在):\n"; try { $safeUnfreezeResult3 = ItemService::safeUnfreezeItem($freezeLogId); echo " ❌ 意外成功\n"; } catch (Exception $e) { echo " ✅ 预期异常: " . $e->getMessage() . "\n"; } echo "\n=== 测试完成 ===\n"; echo "所有异常情况都正确抛出异常,不再返回false状态\n"; DB::rollback(); echo "已回滚测试数据\n"; } catch (Exception $e) { DB::rollback(); echo "测试失败: " . $e->getMessage() . "\n"; }