Gateway 测试在单独运行时全部通过,但在全套件运行时偶发失败(flaky)。
-
测试间状态污染: 多个测试共用全局 logger(
logging.GetSystemLogger()),前一个测试的 Gateway/MockChannel 未完全清理,影响后续测试。 -
并发计数器竞争:
TestGateway_GracefulShutdown_WithErrorHandling中successCount/errorCount被多个 goroutine 无锁访问。已用sync/atomic修复,但类似模式可能存在于其他测试。 -
TestGateway_GracefulShutdown_WithActiveMessages: 单独运行 5/5 通过,全套件运行时偶发失败("所有消息都应该被处理")。原因是前一个测试的 MockChannel goroutine 未完全退出,导致GetSentMessages()计数被污染。
- 每个测试函数开头调用
channel.Stop()+ 重新创建 Gateway,确保无残留状态 - 或者:给 MockChannel 的
sentMessages加Reset()方法,每个测试开头调用 - 长期方案:将
NewGateway改为接受 logger 参数而非使用全局 logger,避免测试间日志交叉
gateway_stability_test.go:int64→uint64类型修复gateway_resource_usage_test.go:int64→uint64+uint64下溢保护gateway_error_recovery_test.go: 消息计数期望值修正(含错误响应)gateway_log_integrity_test.go: 断言修正gateway_graceful_shutdown_test.go:sync/atomic修复竞争 + 断言修正gateway_network_resilience_test.go: 消息计数修正gateway_user_experience_test.go: 断言修正