fix
This commit is contained in:
91
internal/domains/api/services/processors/errors_test.go
Normal file
91
internal/domains/api/services/processors/errors_test.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package processors
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestErrorsJoin_Is(t *testing.T) {
|
||||
// 创建一个参数验证错误
|
||||
originalErr := errors.New("字段验证失败")
|
||||
joinedErr := errors.Join(ErrInvalidParam, originalErr)
|
||||
|
||||
// 测试 errors.Is 是否能正确识别错误类型
|
||||
if !errors.Is(joinedErr, ErrInvalidParam) {
|
||||
t.Errorf("errors.Is(joinedErr, ErrInvalidParam) 应该返回 true")
|
||||
}
|
||||
|
||||
if errors.Is(joinedErr, ErrSystem) {
|
||||
t.Errorf("errors.Is(joinedErr, ErrSystem) 应该返回 false")
|
||||
}
|
||||
|
||||
// 测试错误消息
|
||||
expectedMsg := "参数校验不正确\n字段验证失败"
|
||||
if joinedErr.Error() != expectedMsg {
|
||||
t.Errorf("错误消息不匹配,期望: %s, 实际: %s", expectedMsg, joinedErr.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func TestErrorsJoin_Unwrap(t *testing.T) {
|
||||
originalErr := errors.New("原始错误")
|
||||
joinedErr := errors.Join(ErrSystem, originalErr)
|
||||
|
||||
// 测试 Unwrap - errors.Join 的 Unwrap 行为
|
||||
// errors.Join 的 Unwrap 可能返回 nil 或者第一个错误,这取决于实现
|
||||
// 我们主要关心 errors.Is 是否能正确工作
|
||||
if !errors.Is(joinedErr, ErrSystem) {
|
||||
t.Errorf("errors.Is(joinedErr, ErrSystem) 应该返回 true")
|
||||
}
|
||||
}
|
||||
|
||||
func TestErrorsJoin_MultipleErrors(t *testing.T) {
|
||||
err1 := errors.New("错误1")
|
||||
err2 := errors.New("错误2")
|
||||
joinedErr := errors.Join(ErrNotFound, err1, err2)
|
||||
|
||||
// 测试 errors.Is 识别多个错误类型
|
||||
if !errors.Is(joinedErr, ErrNotFound) {
|
||||
t.Errorf("errors.Is(joinedErr, ErrNotFound) 应该返回 true")
|
||||
}
|
||||
|
||||
// 测试错误消息
|
||||
expectedMsg := "查询为空\n错误1\n错误2"
|
||||
if joinedErr.Error() != expectedMsg {
|
||||
t.Errorf("错误消息不匹配,期望: %s, 实际: %s", expectedMsg, joinedErr.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func TestErrorsJoin_RealWorldScenario(t *testing.T) {
|
||||
// 模拟真实的处理器错误场景
|
||||
validationErr := errors.New("手机号格式不正确")
|
||||
processorErr := errors.Join(ErrInvalidParam, validationErr)
|
||||
|
||||
// 在应用服务层,现在应该可以正确识别错误类型
|
||||
if !errors.Is(processorErr, ErrInvalidParam) {
|
||||
t.Errorf("应用服务层应该能够识别 ErrInvalidParam")
|
||||
}
|
||||
|
||||
// 错误消息应该包含两种信息
|
||||
errorMsg := processorErr.Error()
|
||||
if !contains(errorMsg, "参数校验不正确") {
|
||||
t.Errorf("错误消息应该包含错误类型: %s", errorMsg)
|
||||
}
|
||||
if !contains(errorMsg, "手机号格式不正确") {
|
||||
t.Errorf("错误消息应该包含原始错误: %s", errorMsg)
|
||||
}
|
||||
}
|
||||
|
||||
// 辅助函数:检查字符串是否包含子字符串
|
||||
func contains(s, substr string) bool {
|
||||
return len(s) >= len(substr) && (s == substr ||
|
||||
(len(s) > len(substr) && (s[:len(substr)] == substr ||
|
||||
s[len(s)-len(substr):] == substr ||
|
||||
func() bool {
|
||||
for i := 1; i <= len(s)-len(substr); i++ {
|
||||
if s[i:i+len(substr)] == substr {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}())))
|
||||
}
|
||||
Reference in New Issue
Block a user