Merge branch 'develop' of https://github.com/zchh/beego into error

This commit is contained in:
Ming Deng 2021-01-22 15:33:12 +08:00
commit 05f8058be1
3 changed files with 219 additions and 0 deletions

14
core/codes/codes.go Normal file
View File

@ -0,0 +1,14 @@
package codes
// A Code is an unsigned 32-bit error code as defined in the beego spec.
type Code uint32
const (
// SessionSessionStartError means func SessionStart error in session module.
SessionSessionStartError Code = 5001001
)
// CodeToStr is a map about Code and Code's message
var CodeToStr = map[Code]string{
SessionSessionStartError : `"SESSION_MODULE_SESSION_START_ERROR"`,
}

53
core/error/error.go Normal file
View File

@ -0,0 +1,53 @@
package error
import (
"fmt"
"github.com/beego/beego/v2/core/codes"
"strconv"
)
// Error type defines custom error for Beego. It is used by every module
// in Beego. Each `Error` message contains three pieces of data: error code,
// error message.
// More docs http://beego.me/docs/module/error.md.
type Error struct {
Code codes.Code
Msg string
}
// New returns a Error representing c and msg.
func New(c codes.Code, msg string) *Error {
return &Error{Code: c, Msg: msg}
}
// Err returns an error representing c and msg. If c is OK, returns nil.
func Err(c codes.Code, msg string) error {
return New(c, msg)
}
// Errorf returns Error(c, fmt.Sprintf(format, a...)).
func Errorf(c codes.Code, format string, a ...interface{}) error {
return Err(c, fmt.Sprintf(format, a...))
}
// Error returns formatted message for user.
func (e *Error) Error() string {
codeSrt := strconv.FormatUint(uint64(e.GetCode()), 10)
return fmt.Sprintf("beego error: code = %s desc = %s", codeSrt, e.GetMessage())
}
// GetCode returns Error's Code.
func (e *Error) GetCode() codes.Code {
if e != nil {
return e.Code
}
return 0
}
// GetMessage returns Error's Msg.
func (e *Error) GetMessage() string {
if e != nil {
return e.Msg
}
return ""
}

152
core/error/error_test.go Normal file
View File

@ -0,0 +1,152 @@
package error
import (
"github.com/beego/beego/v2/core/codes"
"reflect"
"testing"
)
func TestErr(t *testing.T) {
type args struct {
c codes.Code
msg string
}
tests := []struct {
name string
args args
wantErr bool
}{
// TODO: Add test cases.
{name: "1", args: args{codes.SessionSessionStartError, codes.CodeToStr[codes.SessionSessionStartError]}, wantErr: true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := Err(tt.args.c, tt.args.msg); (err != nil) != tt.wantErr {
t.Errorf("Err() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
func TestError_Error(t *testing.T) {
type fields struct {
Code codes.Code
Msg string
}
tests := []struct {
name string
fields fields
want string
}{
// TODO: Add test cases.
{name: "1", fields: fields{codes.SessionSessionStartError, codes.CodeToStr[codes.SessionSessionStartError]}, want: "beego error: code = 5001001 desc = \"SESSION_MODULE_SESSION_START_ERROR\""},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
e := &Error{
Code: tt.fields.Code,
Msg: tt.fields.Msg,
}
if got := e.Error(); got != tt.want {
t.Errorf("Error() = %v, want %v", got, tt.want)
}
})
}
}
func TestError_GetCode(t *testing.T) {
type fields struct {
Code codes.Code
Msg string
}
tests := []struct {
name string
fields fields
want codes.Code
}{
// TODO: Add test cases.
{name: "1", fields: fields{codes.SessionSessionStartError, codes.CodeToStr[codes.SessionSessionStartError]}, want: codes.SessionSessionStartError},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
e := &Error{
Code: tt.fields.Code,
Msg: tt.fields.Msg,
}
if got := e.GetCode(); got != tt.want {
t.Errorf("GetCode() = %v, want %v", got, tt.want)
}
})
}
}
func TestError_GetMessage(t *testing.T) {
type fields struct {
Code codes.Code
Msg string
}
tests := []struct {
name string
fields fields
want string
}{
// TODO: Add test cases.
{name: "1", fields: fields{codes.SessionSessionStartError, codes.CodeToStr[codes.SessionSessionStartError]}, want: codes.CodeToStr[codes.SessionSessionStartError]},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
e := &Error{
Code: tt.fields.Code,
Msg: tt.fields.Msg,
}
if got := e.GetMessage(); got != tt.want {
t.Errorf("GetMessage() = %v, want %v", got, tt.want)
}
})
}
}
func TestErrorf(t *testing.T) {
type args struct {
c codes.Code
format string
a []interface{}
}
tests := []struct {
name string
args args
wantErr bool
}{
// TODO: Add test cases.
{name: "1", args: args{codes.SessionSessionStartError, "%s", []interface{}{codes.CodeToStr[codes.SessionSessionStartError]}}, wantErr: true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := Errorf(tt.args.c, tt.args.format, tt.args.a...); (err != nil) != tt.wantErr {
t.Errorf("Errorf() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
func TestNew(t *testing.T) {
type args struct {
c codes.Code
msg string
}
tests := []struct {
name string
args args
want *Error
}{
// TODO: Add test cases.
{name: "1", args: args{codes.SessionSessionStartError, codes.CodeToStr[codes.SessionSessionStartError]}, want: &Error{Code:codes.SessionSessionStartError, Msg:codes.CodeToStr[codes.SessionSessionStartError]}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := New(tt.args.c, tt.args.msg); !reflect.DeepEqual(got, tt.want) {
t.Errorf("New() = %v, want %v", got, tt.want)
}
})
}
}