# AttributeError: Mock 对象没有属性 'close'
处理上述异常时又出现另一个异常:
TypeError: MagicMock 对象不能在 'await' 表达式中使用

- **ID:** `python/pytest-mock-magicmock-spec-missing`
- **领域:** python
- **类别:** type_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

MagicMock 被返回，但期望的是异步上下文管理器或特定接口。MagicMock 会自动创建属性，但其返回值不可 await；协程应使用 AsyncMock 并配置魔术方法。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 3.8 | active | — | — |
| 3.11 | active | — | — |
| 3.12 | active | — | — |

## 解决方案

1. **** (93% 成功率)
   ```
   Use AsyncMock for async interfaces:
  from unittest.mock import AsyncMock
  mock_client = AsyncMock()
  mock_client.get.return_value = {'ok': True}
   ```
2. **** (85% 成功率)
   ```
   Configure magic methods on MagicMock:
  m = MagicMock()
  m.__aenter__ = AsyncMock(return_value=m)
  m.__aexit__ = AsyncMock(return_value=None)
   ```

## 无效尝试

- **** — Fixes only the first error; await-related TypeError persists for async usage. (70% 失败率)
- **** — Plain Mock does not support __aenter__/__aexit__ or magic methods; more AttributeErrors appear. (85% 失败率)
