質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

2578閲覧

go-cmpで複数のフィールドを無視するようにしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/08/03 06:04

お世話になっております。
下記のような構造体が与えられている状態でcmp.Diffを使用した構造体比較のテストを書いています。
要件としては、IgnoreFieldsでフィールドを無視することが可能ですが、UserのPasswordとModelのCreatedAtの複数を無視したい場合はどのようにすれば可能でしょうか?

go

1type User struct { 2 Model 3 Name string 4 Password string 5} 6 7type Model struct { 8 ID uint `gorm:"primary_key"` 9 CreatedAt time.Time 10 UpdatedAt time.Time 11 DeletedAt *time.Time `sql:"index"` 12} 13 14func TestCreateUser(t *testing.T) { 15 (省略) 16 for _, tt := range tests { 17 t.Run(tt.name, func(t *testing.T) { 18 CreateUser(tt.args.db, tt.args.query) 19 gotUser := FindUserByID(db, "1") 20 // cmpopts.IgnoreFields(Model{}, "ID", "CreatedAt", "UpdatedAt")も無視したい 21 ignoreOpt := cmpopts.IgnoreFields(User{}, "Password") 22 if diff := cmp.Diff(gotUser, tt.wantUser, ignoreOpt); diff != "" { 23 t.Errorf("TestCreateUser differs: (-got +want)\n%s", diff) 24 } 25 }) 26 } 27}

Version

Go 1.12.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

[]cmp.Option のスライスを用意して、無視する対象を列挙する方法はどうでしょうか?

func TestCreateUser(t *testing.T) { //(省略) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { CreateUser(tt.args.db, tt.args.query) gotUser := FindUserByID(db, "1") // cmpopts.IgnoreFields(Model{}, "ID", "CreatedAt", "UpdatedAt")も無視したい opts := []cmp.Option{ cmpopts.IgnoreFields(User{}, "Password"), cmpopts.IgnoreFields(Model{}, "ID", "CreatedAt", "UpdatedAt"), } if diff := cmp.Diff(gotUser, tt.wantUser, opts...); diff != "" { t.Errorf("TestCreateUser differs: (-got +want)\n%s", diff) } }) } }

投稿2020/08/03 06:26

d_tutuz

総合スコア730

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/03 06:37

回答いただいた内容でパスしました 早急な回答ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問