package container import ( "fmt" "LEIT_PM/global" "reflect" "testing" ) func TestElementInformation_New(t *testing.T) { elementInformation := NewElementInformation(FactoryOfTestElement) if elementInformation == nil { t.Fatalf("创建失败!") } if elementInformation.IsGlobal() { t.Fatalf("目前不支持全局组件") } if elementInformation.interfaceType != testElementType { t.Fatalf("接口类型错误") } } func TestElementInformation_New_NullError(t *testing.T) { defer func() { if err := recover(); err != "工厂不能为空!" { t.Fatalf("意外错误:%s", err) } }() _ = NewElementInformation(nil) t.Fatalf("意外的没有错误!") } func TestElementInformation_New_FactoryTypeError(t *testing.T) { defer func() { if err := recover(); err != "工厂必须是func!" { t.Fatalf("意外错误:%s", err) } }() _ = NewElementInformation(reflect.TypeOf(FactoryOfTestElement())) t.Fatalf("意外的没有错误!") } func TestElementInformation_New_ParameterCountError(t *testing.T) { defer func() { if err := recover(); err != "工厂不能有参数!" { t.Fatalf("意外错误:%s", err) } }() _ = NewElementInformation(FactoryOfElementTestInterfaceWithContent) t.Fatalf("意外的没有错误!") } func TestElementInformation_New_NoReturnValueError(t *testing.T) { defer func() { if err := recover(); err != "工厂必值需有返回值!" { t.Fatalf("意外错误:%s", err) } }() _ = NewElementInformation(FactoryWithoutResult) t.Fatalf("意外的没有错误!") } func TestElementInformation_New_TooManyResultsError(t *testing.T) { defer func() { if err := recover(); err != "工厂只能有一个返回值!" { t.Fatalf("意外错误:%s", err) } }() _ = NewElementInformation(FactoryWithTooManyResults) t.Fatalf("意外的没有错误!") } func TestElementInformation_New_ReturnValueTypeError(t *testing.T) { defer func() { if err := recover(); err != "工厂的返回值必需是interface!" { t.Fatalf("意外错误:%s", err) } }() _ = NewElementInformation(FactoryOfTestElementImplement) t.Fatalf("意外的没有错误!") } func TestElementInformation_Interface(t *testing.T) { information := NewElementInformation(FactoryOfTestElement) information.interfaceType = testElementType if information.Interface() != testElementType { t.Fatalf("获取接口类型错误") } } func TestElementInformation_BuildHandler(t *testing.T) { information := NewElementInformation(FactoryOfTestElement) userId := "userId" user := &global.User{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.(*ElementHandler) if !ok { t.Fatalf("Handler类型不正确!") } } func TestElementInformation_BuildHandler_NullSession(t *testing.T) { information := NewElementInformation(FactoryOfTestElement) if information.Interface() != testElementType { t.Fatalf("接口类型错误") } _, err := information.BuildHandler(nil) if err == nil { t.Fatalf("意外的没有错误!") } if err.Error() != "会话上下文不能为空!" { t.Fatalf("意外错误:%s", err.Error()) } } func TestElementInformation_BuildHandler_WithFactoryOfNullInterface(t *testing.T) { information := NewElementInformation(FactoryOfNullTestElement) userId := "userId" user := &global.User{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 TestElementInformation_BuildHandler_WithTooManyIn(t *testing.T) { information := NewElementInformation(FactoryOfTestWithTooManyInSetContext) userId := "userId" user := &global.User{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 TestElementInformation_BuildHandler_WithNoIn(t *testing.T) { information := NewElementInformation(FactoryOfTestWithNoInSetContext) userId := "userId" user := &global.User{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 TestElementInformation_BuildHandler_WithReturnValue(t *testing.T) { information := NewElementInformation(FactoryOfTestWithReturnValueSetContext) userId := "userId" user := &global.User{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 TestElementInformation_BuildHandler_WithErrorIn(t *testing.T) { information := NewElementInformation(FactoryOfTestWithErrorInSetContext) userId := "userId" user := &global.User{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()) } }