package container
|
|
|
|
import (
|
|
"LAPP_GAAS_GFrame_BACKEND/web/models"
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestServiceInformation_New(t *testing.T) {
|
|
|
|
serviceInformation := NewServiceInformation(FactoryOfTestService)
|
|
if serviceInformation == nil {
|
|
t.Fatalf("创建失败!")
|
|
}
|
|
if serviceInformation.IsGlobal() {
|
|
t.Fatalf("目前不支持全局组件")
|
|
}
|
|
if serviceInformation.interfaceType != testServiceType {
|
|
t.Fatalf("接口类型错误")
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_New_NullError(t *testing.T) {
|
|
defer func() {
|
|
if err := recover(); err != "工厂不能为空!" {
|
|
t.Fatalf("意外错误:%s", err)
|
|
}
|
|
}()
|
|
|
|
_ = NewServiceInformation(nil)
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
|
|
func TestServiceInformation_New_FactoryTypeError(t *testing.T) {
|
|
defer func() {
|
|
if err := recover(); err != "工厂必须是func!" {
|
|
t.Fatalf("意外错误:%s", err)
|
|
}
|
|
}()
|
|
|
|
_ = NewServiceInformation(reflect.TypeOf(FactoryOfTestElement()))
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
|
|
func TestServiceInformation_New_ParameterCountError(t *testing.T) {
|
|
defer func() {
|
|
if err := recover(); err != "工厂不能有参数!" {
|
|
t.Fatalf("意外错误:%s", err)
|
|
}
|
|
}()
|
|
|
|
_ = NewServiceInformation(FactoryOfServiceTestInterfaceWithContent)
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
|
|
func TestServiceInformation_New_NoReturnValueError(t *testing.T) {
|
|
defer func() {
|
|
if err := recover(); err != "工厂必值需有返回值!" {
|
|
t.Fatalf("意外错误:%s", err)
|
|
}
|
|
}()
|
|
|
|
_ = NewServiceInformation(FactoryWithoutResult)
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
|
|
func TestServiceInformation_New_TooManyResultsError(t *testing.T) {
|
|
defer func() {
|
|
if err := recover(); err != "工厂只能有一个返回值!" {
|
|
t.Fatalf("意外错误:%s", err)
|
|
}
|
|
}()
|
|
|
|
_ = NewServiceInformation(FactoryWithTooManyResults)
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
|
|
func TestServiceInformation_New_ReturnValueTypeError(t *testing.T) {
|
|
defer func() {
|
|
if err := recover(); err != "工厂的返回值必需是interface!" {
|
|
t.Fatalf("意外错误:%s", err)
|
|
}
|
|
}()
|
|
|
|
_ = NewServiceInformation(FactoryOfTestElementImplement)
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
|
|
func TestServiceInformation_Interface(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
information.interfaceType = testServiceType
|
|
if information.Interface() != testServiceType {
|
|
t.Fatalf("获取接口类型错误")
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_RegisterMethod(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if information.Interface() != testServiceType {
|
|
t.Fatalf("接口类型错误")
|
|
}
|
|
methodName := "String"
|
|
method := information.RegisterMethod(methodName)
|
|
if method == nil {
|
|
t.Fatalf("没找到方法")
|
|
}
|
|
if len(information.methodMapping) != 1 {
|
|
t.Fatalf("方法信息映射数量错误!")
|
|
}
|
|
storedMethod, ok := information.methodMapping[methodName]
|
|
if !ok {
|
|
t.Fatalf("没找到注册的方法!")
|
|
}
|
|
if storedMethod != method {
|
|
t.Fatalf("注册的方法不正确!")
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_RegisterMethod_EmptyMethodName(t *testing.T) {
|
|
defer func() {
|
|
if err := recover(); err != "方法名不能为空!" {
|
|
t.Fatalf("意外错误:%s", err)
|
|
}
|
|
}()
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if information.Interface() != testServiceType {
|
|
t.Fatalf("接口类型错误")
|
|
}
|
|
methodName := ""
|
|
_ = information.RegisterMethod(methodName)
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
|
|
func TestServiceInformation_RegisterMethod_RepeatMethod(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if information.Interface() != testServiceType {
|
|
t.Fatalf("接口类型错误")
|
|
}
|
|
methodName := "String"
|
|
method := information.RegisterMethod(methodName)
|
|
if method == nil {
|
|
t.Fatalf("没找到方法")
|
|
}
|
|
defer func() {
|
|
if err := recover(); err != fmt.Sprintf("方法%s已经注册!", methodName) {
|
|
t.Fatalf("意外错误:%s", err)
|
|
}
|
|
}()
|
|
_ = information.RegisterMethod("String")
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
|
|
func TestServiceInformation_RegisterMethod_MissingMethod(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if information.Interface() != testServiceType {
|
|
t.Fatalf("接口类型错误")
|
|
}
|
|
methodName := "M1"
|
|
defer func() {
|
|
if err := recover(); err != fmt.Sprintf("找不到方法%s!", methodName) {
|
|
t.Fatalf("意外错误:%s", err)
|
|
}
|
|
}()
|
|
_ = information.RegisterMethod(methodName)
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
|
|
func TestServiceInformation_RegisterMethod_ReturnValuesCountError(t *testing.T) {
|
|
defer func() {
|
|
if err := recover(); err != fmt.Sprintf("返回值数量错误! 返回值数量: %d", 3) {
|
|
t.Fatalf("意外错误:%s", err)
|
|
}
|
|
}()
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if information.Interface() != testServiceType {
|
|
t.Fatalf("接口类型错误")
|
|
}
|
|
methodName := "String2"
|
|
_ = information.RegisterMethod(methodName)
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
|
|
func TestServiceInformation_RegisterMethod_ReturnValueTypeError(t *testing.T) {
|
|
defer func() {
|
|
if err := recover(); err != fmt.Sprintf("最后一个返回值类型错误! 类型:%s", "string") {
|
|
t.Fatalf("意外错误:%s", err)
|
|
}
|
|
}()
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if information.Interface() != testServiceType {
|
|
t.Fatalf("接口类型错误")
|
|
}
|
|
methodName := "NoError"
|
|
_ = information.RegisterMethod(methodName)
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
|
|
func TestServiceInformation_Method(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
methodName := "String"
|
|
method, ok := testServiceType.MethodByName(methodName)
|
|
if !ok {
|
|
t.Fatalf("意外的没找到方法:%s", methodName)
|
|
}
|
|
methodInformation := NewServiceMethodInformation(&method)
|
|
information.methodMapping[methodName] = methodInformation
|
|
if information.Method(methodName) == nil {
|
|
t.Fatalf("获取方法信息错误!")
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_Method_NullError(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if information.Method("") != nil {
|
|
t.Fatalf("找到了空方法名的方法")
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_Method_NotFound(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if information.Method("methodName") != nil {
|
|
t.Fatalf("找到了不存在的方法")
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_Methods(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
methodName := "String"
|
|
method, ok := testServiceType.MethodByName(methodName)
|
|
if !ok {
|
|
t.Fatalf("意外的没找到方法:%s", methodName)
|
|
}
|
|
methodInformation := NewServiceMethodInformation(&method)
|
|
information.methodMapping[methodName] = methodInformation
|
|
if len(information.Methods()) != 1 {
|
|
t.Fatalf("方法列表数量不正确!")
|
|
}
|
|
if information.Methods()[0] != methodInformation {
|
|
t.Fatalf("获取方法信息列表错误!")
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_Methods_Empty(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if len(information.Methods()) != 0 {
|
|
t.Fatalf("方法列表意外的不为空!")
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_BuildHandler(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if information.Interface() != testServiceType {
|
|
t.Fatalf("接口类型错误")
|
|
}
|
|
methodName := "String"
|
|
_ = information.RegisterMethod(methodName)
|
|
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)
|
|
if err != nil {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
_, ok := handler.(*ServiceHandler)
|
|
if !ok {
|
|
t.Fatalf("Handler类型不正确!")
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_BuildHandler_NullCaller(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if information.Interface() != testServiceType {
|
|
t.Fatalf("接口类型错误")
|
|
}
|
|
methodName := "String"
|
|
method := information.RegisterMethod(methodName)
|
|
userId := "userId"
|
|
user := &models.Usertab{Userid: userId}
|
|
sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
|
|
if err != nil {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
var callerBrokerBuilder CallerBrokerBuilder = new(TestCallerBrokerBuilderImplementWithError)
|
|
method.AppendBrokerBuilder(callerBrokerBuilder)
|
|
_, err = information.BuildHandler(sessionContext)
|
|
if err == nil {
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
if err.Error() != fmt.Sprintf("第2个调用器不能为空!") {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_BuildHandler_NullSession(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestService)
|
|
if information.Interface() != testServiceType {
|
|
t.Fatalf("接口类型错误")
|
|
}
|
|
_, err := information.BuildHandler(nil)
|
|
if err == nil {
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
if err.Error() != "会话上下文不能为空!" {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_BuildHandler_WithTooManyIn(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestWithTooManyInSetContext)
|
|
userId := "userId"
|
|
user := &models.Usertab{Userid: userId}
|
|
sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
|
|
if err != nil {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
_, err = information.BuildHandler(sessionContext)
|
|
if err == nil {
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
if err.Error() != fmt.Sprintf("设置器参数数量不正确!") {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_BuildHandler_WithFactoryOfNullInterface(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfNullTestService)
|
|
userId := "userId"
|
|
user := &models.Usertab{Userid: userId}
|
|
sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
|
|
if err != nil {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
_, err = information.BuildHandler(sessionContext)
|
|
if err == nil {
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
if err.Error() != fmt.Sprintf("实际值不能是空接口!") {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_BuildHandler_WithNoIn(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestWithNoInSetContext)
|
|
userId := "userId"
|
|
user := &models.Usertab{Userid: userId}
|
|
sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
|
|
if err != nil {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
_, err = information.BuildHandler(sessionContext)
|
|
if err == nil {
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
if err.Error() != fmt.Sprintf("设置器参数数量不正确!") {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_BuildHandler_WithReturnValue(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestWithReturnValueSetContext)
|
|
userId := "userId"
|
|
user := &models.Usertab{Userid: userId}
|
|
sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
|
|
if err != nil {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
_, err = information.BuildHandler(sessionContext)
|
|
if err == nil {
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
if err.Error() != fmt.Sprintf("设置器返回值数量不正确!") {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
}
|
|
|
|
func TestServiceInformation_BuildHandler_WithErrorIn(t *testing.T) {
|
|
|
|
information := NewServiceInformation(FactoryOfTestWithErrorInSetContext)
|
|
userId := "userId"
|
|
user := &models.Usertab{Userid: userId}
|
|
sessionContext, err := NewSessionContext(user, transactionHandlerFactoryMock)
|
|
if err != nil {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
_, err = information.BuildHandler(sessionContext)
|
|
if err == nil {
|
|
t.Fatalf("意外的没有错误!")
|
|
}
|
|
if err.Error() != fmt.Sprintf("设置器类型不正确!") {
|
|
t.Fatalf("意外错误:%s", err.Error())
|
|
}
|
|
}
|