On Wed, Oct 26, 2022 at 01:38:51PM +0300, David Harel wrote: [...] > func errorCheckResult(err error) string { > if err == nil { > return "" > } > pqerr := err.(*pq.Error) > switch pqerr.Get('C') { > case "23505": > return "Key violation" > } > return "Error unknown" > } > > Now I want to be able to test my code thereby generating this type of error > in the testing function. > So I need to create an error variable of the type pq.Error and use it as a > parameter to db.Mock. Something like: > > mockDB := wrapper.NewMockQuerier(ctrl) > // The part that breaks > err := fmt.Errorf("pq: %s", `duplicate key value violates unique constraint > "treatment_pk" > {"Severity":"ERROR","Code":"23505","Message":".....MoreStuff....."}`) > > mockDB.EXPECT().AppointmentUpdate(gomock.Any(), gomock.Any()).Return(err) > > Any idea?
Well, look at what you do: fmt.Errorf("pq: %s", `some long text`) creates a value of some (irrelevant) type implementing the standard interface error and containing a string which is obtained by calling fmt.Sprintf on the aguments. The "%s" verb in the format string means "get the string representation of the matching argument and insert in into the format string in place of the verb". Your argument is itself a string, and it is completely opaque to fmt.Errorf - it's taken "as is" and is not interpreted in any way. Please stop and think of this for a moment: even if the contents of this string would be somehow interpreted, how would the code in package fmt guess it has to produce a value of type pg.Error from that string, and how exactly? So, if you need to create a *pq.Error, go on and do just that in your mock. Based on [1], you could do something like return &pq.Error{ Code: "23505", Severity: "ERROR', Message: `duplicate key value violates unique constraint "treatment_pk"`, } 1. https://github.com/lib/pq/blob/d65e6ae4bdd1c86b16cd6d2bcff4fe970dc697b4/error.go#L25 -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/20221026124535.rlmptmaonqsvtsup%40carbon.