Unit testing 如何在结构中传递结构数组?
我在结构中传递结构数组,在单元测试中,我使用了ServiceAccounts的dto和我的测试代码TestStoreServiceAccounts。如何在结构中传递结构数组?结构嵌套是我不理解的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
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 ...
},
}