You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

540 lines
16 KiB

package container
import (
"LAPP_LF_MOM_BACKEND/web/models"
"errors"
"fmt"
"reflect"
"testing"
)
func TestServiceMethodInformation_New(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
serviceMethodInformation := NewServiceMethodInformation(&method)
if serviceMethodInformation == nil {
t.Fatalf("创建失败!")
}
if serviceMethodInformation.methodName != methodName {
t.Fatalf("方法名设置错误!")
}
if serviceMethodInformation.methodType != method.Type {
t.Fatalf("方法类型设置错误!")
}
if serviceMethodInformation.routerBuilder != nil {
t.Fatalf("路由创建器设置错误!")
}
if serviceMethodInformation.callerBrokerBuilders == nil {
t.Fatalf("调用器代理创建器列表设置错误!")
}
if len(serviceMethodInformation.callerBrokerBuilders) != 1 {
t.Fatalf("调用器代理创建器列表数量错误!")
}
}
func TestServiceMethodInformation_New_NullError(t *testing.T) {
defer func() {
if err := recover(); err != "方法类型不能为空!" {
t.Fatalf("意外错误:%s", err)
}
}()
_ = NewServiceMethodInformation(nil)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_New_EmptyMethodName(t *testing.T) {
defer func() {
if err := recover(); err != "方法名不能为空!" {
t.Fatalf("意外错误:%s", err)
}
}()
method := reflect.Method{Name: "", Type: nil}
_ = NewServiceMethodInformation(&method)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_New_ReturnValuesCountError(t *testing.T) {
methodName := "String2"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
defer func() {
if err := recover(); err != fmt.Sprintf("返回值数量错误! 返回值数量: %d", method.Type.NumOut()) {
t.Fatalf("意外错误:%s", err)
}
}()
_ = NewServiceMethodInformation(&method)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_New_ReturnValueTypeError(t *testing.T) {
methodName := "NoError"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
defer func() {
if err := recover(); err != fmt.Sprintf("最后一个返回值类型错误! 类型:%s", method.Type.Out(method.Type.NumOut()-1)) {
t.Fatalf("意外错误:%s", err)
}
}()
_ = NewServiceMethodInformation(&method)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_MethodName(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
information.methodName = methodName
if information.MethodName() != methodName {
t.Fatalf("方法名获取错误!")
}
}
func TestServiceMethodInformation_MethodType(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
information.methodType = method.Type
if information.MethodType() != method.Type {
t.Fatalf("方法类型获取错误!")
}
}
func TestServiceMethodInformation_RouterBuilder(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
testError := errors.New("TestError")
var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
return "", "", nil, testError
}
information.routerBuilder = routerBuilder
storedRouterBuilder := information.RouterBuilder()
if storedRouterBuilder == nil {
t.Fatalf("获取到的路由创建器不应为空!")
}
_, _, _, testError2 := storedRouterBuilder(nil, "", nil)
if testError2 != testError {
t.Fatalf("路由创建器获取错误!")
}
}
func TestServiceMethodInformation_AppendBrokerBuilder(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
if information == nil {
t.Fatalf("没找到信息")
}
var callerBrokerBuilder CallerBrokerBuilder = new(TestCallerBrokerBuilderImplement)
information.AppendBrokerBuilder(callerBrokerBuilder)
expectedLength := 2
if len(information.callerBrokerBuilders) != expectedLength {
t.Fatalf("调用器代理创建器数量错误!预期:%d,实际:%d.", expectedLength, len(information.callerBrokerBuilders))
}
if information.callerBrokerBuilders[1] != callerBrokerBuilder {
t.Fatalf("调用器代理创建器设置错误!")
}
}
func TestServiceMethodInformation_AppendBrokerBuilder_NullError(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
defer func() {
if err := recover(); err != fmt.Sprintf("调用器代理创建器不能设置为空!") {
t.Fatalf("意外错误:%s", err)
}
}()
information.AppendBrokerBuilder(nil)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_AppendBrokerBuilder_CheckError(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
testError := errors.New("TestError")
var callerBrokerBuilder CallerBrokerBuilder = &TestCallerBrokerBuilderImplementWithError{checkingError: testError}
defer func() {
if err := recover(); err != testError.Error() {
t.Fatalf("意外错误:%s", err)
}
}()
information.AppendBrokerBuilder(callerBrokerBuilder)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_SetRouterBuilder(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
testError := errors.New("TestError")
var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
return "", "", nil, testError
}
information.SetRouterBuilder(routerBuilder)
storedRouterBuilder := information.routerBuilder
if storedRouterBuilder == nil {
t.Fatalf("获取到的路由创建器不应为空!")
}
_, _, _, testError2 := storedRouterBuilder(nil, "", nil)
if testError2 != testError {
t.Fatalf("路由创建器获取错误!")
}
}
func TestServiceMethodInformation_SetRouterBuilder_NullError(t *testing.T) {
defer func() {
if err := recover(); err != "路由创建器不能设置为空!" {
t.Fatalf("意外错误:%s", err)
}
}()
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
information.SetRouterBuilder(nil)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_SetRouterBuilder_RepeatedError(t *testing.T) {
defer func() {
if err := recover(); err != "已经设置路由创建器!" {
t.Fatalf("意外错误:%s", err)
}
}()
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
testError := errors.New("TestError")
var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
return "", "", nil, testError
}
information.SetRouterBuilder(routerBuilder)
information.SetRouterBuilder(routerBuilder)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_SetBuilders(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
if information == nil {
t.Fatalf("没找到信息")
}
if information.methodName != methodName {
t.Fatalf("方法名设置错误!")
}
if information.MethodName() != methodName {
t.Fatalf("方法名获取错误!")
}
if information.methodType != method.Type {
t.Fatalf("方法类型设置错误!")
}
if information.MethodType() != method.Type {
t.Fatalf("方法类型获取错误!")
}
testError := errors.New("TestError")
var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
return "", "", nil, testError
}
var callerBrokerBuilder CallerBrokerBuilder = new(TestCallerBrokerBuilderImplement)
builders := BuilderSet{routerBuilder, []CallerBrokerBuilder{callerBrokerBuilder}}
information.SetBuilders(builders)
if information.routerBuilder == nil {
t.Fatalf("路由创建器不应为空!")
}
_, _, _, testError1 := information.routerBuilder(nil, "", nil)
if testError1 != testError {
t.Fatalf("路由创建器设置错误!")
}
expectedLength := 2
if len(information.callerBrokerBuilders) != expectedLength {
t.Fatalf("调用器代理创建器数量错误!预期:%d,实际:%d.", expectedLength, len(information.callerBrokerBuilders))
}
if information.callerBrokerBuilders[1] != callerBrokerBuilder {
t.Fatalf("调用器代理创建器设置错误!")
}
}
func TestServiceMethodInformation_SetBuilders_NullBrokerBuilderError(t *testing.T) {
defer func() {
if err := recover(); err != "调用器代理创建器不能设置为空!" {
t.Fatalf("意外错误:%s", err)
}
}()
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
testError := errors.New("TestError")
var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
return "", "", nil, testError
}
builders := BuilderSet{routerBuilder, []CallerBrokerBuilder{nil}}
information.SetBuilders(builders)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_SetBuilders_MethodCheckError(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
testError := errors.New("TestError")
var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
return "", "", nil, testError
}
var callerBrokerBuilder CallerBrokerBuilder = &TestCallerBrokerBuilderImplementWithError{checkingError: testError}
builders := BuilderSet{routerBuilder, []CallerBrokerBuilder{callerBrokerBuilder}}
defer func() {
if err := recover(); err != testError.Error() {
t.Fatalf("意外错误:%s", err)
}
}()
information.SetBuilders(builders)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_SetBuilders_NullRouterBuilderError(t *testing.T) {
defer func() {
if err := recover(); err != "路由创建器不能设置为空!" {
t.Fatalf("意外错误:%s", err)
}
}()
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
builders := BuilderSet{nil, nil}
information.SetBuilders(builders)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_SetBuilders_RepeatedRouterBuilderError(t *testing.T) {
defer func() {
if err := recover(); err != "已经设置路由创建器!" {
t.Fatalf("意外错误:%s", err)
}
}()
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
testError := errors.New("TestError")
var routerBuilder = func(CallerFactory, string, reflect.Type) (HttpMethod, string, Router, error) {
return "", "", nil, testError
}
builders := BuilderSet{routerBuilder, nil}
information.SetBuilders(builders)
information.SetBuilders(builders)
t.Fatalf("意外的没有错误!")
}
func TestServiceMethodInformation_BuildHandler(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
userId := "userId"
user := &models.Usertab{Userid: userId}
sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
if err != nil {
t.Fatalf("意外错误:%s", err.Error())
}
handler, err := information.BuildHandler(sessionContext, serviceInstance)
if err != nil {
t.Fatalf("意外错误:%s", err.Error())
}
if handler == nil {
t.Fatalf("创建句柄错误!")
}
}
func TestServiceMethodInformation_BuildHandler_NullSession(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
_, err := information.BuildHandler(nil, serviceInstance)
if err == nil {
t.Fatalf("会话不能为空!")
}
if err.Error() != fmt.Sprintf("会话上下文不能为空!") {
t.Fatalf("意外错误:%s", err.Error())
}
}
func TestServiceMethodInformation_BuildHandler_EmptyMethodNameError(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
userId := "userId"
user := &models.Usertab{Userid: userId}
sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
if err != nil {
t.Fatalf("意外错误:%s", err.Error())
}
information.methodName = ""
_, err = information.BuildHandler(sessionContext, serviceInstance)
if err == nil {
t.Fatalf("意外的没有错误!")
}
if err.Error() != fmt.Sprintf("方法名不能为空!") {
t.Fatalf("意外错误:%s", err.Error())
}
}
func TestServiceMethodInformation_BuildHandler_MissingMethodError(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
userId := "userId"
user := &models.Usertab{Userid: userId}
sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
if err != nil {
t.Fatalf("意外错误:%s", err.Error())
}
information.methodName = ""
information.methodName = "NoMethod"
_, err = information.BuildHandler(sessionContext, serviceInstance)
if err == nil {
t.Fatalf("意外的没有错误!")
}
if err.Error() != fmt.Sprintf("未找到方法!") {
t.Fatalf("意外错误:%s", err.Error())
}
}
func TestServiceMethodInformation_BuildHandler_BrokerBuildError(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
testError := errors.New("TestError")
var callerBrokerBuilder CallerBrokerBuilder = &TestCallerBrokerBuilderImplementWithError{buildingError: testError}
information.AppendBrokerBuilder(callerBrokerBuilder)
userId := "userId"
user := &models.Usertab{Userid: userId}
sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
if err != nil {
t.Fatalf("意外错误:%s", err.Error())
}
_, err = information.BuildHandler(sessionContext, serviceInstance)
if err == nil {
t.Fatalf("意外的没有错误!")
}
if err != testError {
t.Fatalf("意外错误:%s", err.Error())
}
}
func TestServiceMethodInformation_BuildHandler_NullCallerError(t *testing.T) {
methodName := "String"
method, ok := testServiceType.MethodByName(methodName)
if !ok {
t.Fatalf("意外的没找到方法!")
}
information := NewServiceMethodInformation(&method)
var callerBrokerBuilder CallerBrokerBuilder = new(TestCallerBrokerBuilderImplementWithError)
information.AppendBrokerBuilder(callerBrokerBuilder)
userId := "userId"
user := &models.Usertab{Userid: userId}
sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
if err != nil {
t.Fatalf("意外错误:%s", err.Error())
}
_, err = information.BuildHandler(sessionContext, serviceInstance)
if err == nil {
t.Fatalf("意外的没有错误!")
}
if err.Error() != fmt.Sprintf("第2个调用器不能为空!") {
t.Fatalf("意外错误:%s", err.Error())
}
}