Unit testing 如何在结构中传递结构数组?

Unit testing 如何在结构中传递结构数组?,unit-testing,go,struct,gorm,dto,Unit Testing,Go,Struct,Gorm,Dto,我在结构中传递结构数组,在单元测试中,我使用了ServiceAccounts的dto和我的测试代码TestStoreServiceAccounts。如何在结构中传递结构数组?结构嵌套是我不理解的 func TestStoreServiceAccounts(t *testing.T) { StoreServiceAccounts = func(serviceAccounts []models.ServiceAccount) ([]string, error) { ServiceAccoun

我在结构中传递结构数组,在单元测试中,我使用了ServiceAccounts的dto和我的测试代码TestStoreServiceAccounts。如何在结构中传递结构数组?结构嵌套是我不理解的

func TestStoreServiceAccounts(t *testing.T) {
StoreServiceAccounts = func(serviceAccounts []models.ServiceAccount) ([]string, error) {
    ServiceAccounts := []string{"service-account-details-inserted"}
    return ServiceAccounts, nil
}
Data := dto.ServiceAccountRequestDTO{
    ServiceAccounts : []{ //error on this line
        WorkspaceID:        1,
        ServiceAccountName: "sa-10",
        ServiceAccountKey: dto.ServiceAccountKey{
            Type:                    "service_account",
            ProjectID:               "abc",
            PrivateKeyID:            "123",
            PrivateKey:              "234",
            ClientEmail:             "read-clusters",
            ClientID:                "cdf",
            AuthURI:                 "https://accounts.google.com/o/oaut",
            TokenURI:                "https://oauth2.googleapis.com/token",
            AuthProviderX509CertURL: "https://www.googleapis.com",
            ClientX509CertURL:       "xwy",
        },
        CreatedAt: "2021-03-08 17:05:21.0",
        UpdatedAt: "2021-03-08 17:05:21.0",
        CreatedBy: "user-01",
        UpdatedBy: "user-01",
    },
}

responseData, err := clusterService.StoreServiceAccountsService(context.Background(), Data)
serviceAccountsdata := []string{"service-account-details-inserted"}

assert.Nil(t, err)
assert.NotNil(t, responseData)
assert.EqualValues(t, serviceAccountsdata, responseData)
}


TL;DR:在DTO结构之外定义您的
ServiceAccount
struct,以便可以重用它。

由于您是在
ServiceAccountRequestDTO
结构中定义
ServiceAccounts
的结构,因此在创建对象时,您还需要再次定义它,如下所示:

Data := dto.ServiceAccountRequestDTO{
    ServiceAccounts : []struct{
        WorkspaceID        int64             `json:"workspace_id"`
        ServiceAccountName string            `json:"serviceAccountName"`
        ServiceAccountKey  ServiceAccountKey `json:"serviceAccountKey"`
        CreatedAt          string            `json:"created_at"`
        UpdatedAt          string            `json:"updated_at"`
        CreatedBy          string            `json:"created_by"`
        UpdatedBy          string            `json:"updated_by"`
    } `json:"serviceAccounts"`{ //start of slice (it's technically not an array) of objects
        { // first object
          WorkspaceID:        1,
          ServiceAccountName: "sa-10",
          ServiceAccountKey: dto.ServiceAccountKey{
              Type:                    "service_account",
              ProjectID:               "abc",
              PrivateKeyID:            "123",
              PrivateKey:              "234",
              ClientEmail:             "read-clusters",
              ClientID:                "cdf",
              AuthURI:                 "https://accounts.google.com/o/oaut",
              TokenURI:                "https://oauth2.googleapis.com/token",
              AuthProviderX509CertURL: "https://www.googleapis.com",
              ClientX509CertURL:       "xwy",
          },
          CreatedAt: "2021-03-08 17:05:21.0",
          UpdatedAt: "2021-03-08 17:05:21.0",
          CreatedBy: "user-01",
          UpdatedBy: "user-01",
        },
        // .. more ServiceAccount objects ...
    },
}
当然,写、读、复制大量代码是非常痛苦的。因此,您应该在外部定义结构


type ServiceAccount struct{
        WorkspaceID        int64             `json:"workspace_id"`
        ServiceAccountName string            `json:"serviceAccountName"`
        ServiceAccountKey  ServiceAccountKey `json:"serviceAccountKey"`
        CreatedAt          string            `json:"created_at"`
        UpdatedAt          string            `json:"updated_at"`
        CreatedBy          string            `json:"created_by"`
        UpdatedBy          string            `json:"updated_by"`
    } `json:"serviceAccounts"`
}

type ServiceAccountRequestDTO struct {
    ServiceAccounts []ServiceAccount
}

然后您可以像这样创建DTO

Data := dto.ServiceAccountRequestDTO{
    ServiceAccounts : []ServiceAccount{ //start of slice of objects
        ServiceAccount { // first object
          WorkspaceID:        1,
          ServiceAccountName: "sa-10",
          ServiceAccountKey: dto.ServiceAccountKey{
              Type:                    "service_account",
              ProjectID:               "abc",
              PrivateKeyID:            "123",
              PrivateKey:              "234",
              ClientEmail:             "read-clusters",
              ClientID:                "cdf",
              AuthURI:                 "https://accounts.google.com/o/oaut",
              TokenURI:                "https://oauth2.googleapis.com/token",
              AuthProviderX509CertURL: "https://www.googleapis.com",
              ClientX509CertURL:       "xwy",
          },
          CreatedAt: "2021-03-08 17:05:21.0",
          UpdatedAt: "2021-03-08 17:05:21.0",
          CreatedBy: "user-01",
          UpdatedBy: "user-01",
        },
        // .. more ServiceAccount objects ...
    },
}


a) 这些不是数组而是片段,b)这与传递无关,这是一个完全简单的语法错误,c)这是一个100%重复,d)
servicecomports:[]{
应该是
servicecomports:[]{
您能详细说明一下吗?如果您能将其标记为已接受的答案,请。
Data := dto.ServiceAccountRequestDTO{
    ServiceAccounts : []ServiceAccount{ //start of slice of objects
        ServiceAccount { // first object
          WorkspaceID:        1,
          ServiceAccountName: "sa-10",
          ServiceAccountKey: dto.ServiceAccountKey{
              Type:                    "service_account",
              ProjectID:               "abc",
              PrivateKeyID:            "123",
              PrivateKey:              "234",
              ClientEmail:             "read-clusters",
              ClientID:                "cdf",
              AuthURI:                 "https://accounts.google.com/o/oaut",
              TokenURI:                "https://oauth2.googleapis.com/token",
              AuthProviderX509CertURL: "https://www.googleapis.com",
              ClientX509CertURL:       "xwy",
          },
          CreatedAt: "2021-03-08 17:05:21.0",
          UpdatedAt: "2021-03-08 17:05:21.0",
          CreatedBy: "user-01",
          UpdatedBy: "user-01",
        },
        // .. more ServiceAccount objects ...
    },
}