Thanks. Exactly what I needed. On Wed, Oct 26, 2022 at 3:45 PM Konstantin Khomoutov <kos...@bswap.ru> wrote:
> 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 > > -- דוד הראל עמוקה ד.נ. מרום הגליל 1380200 טל: 054-2263892 -- 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/CA%2BE_%3DOYZ%3DSHOr-VS8nikYR1c17WWF__0BwMx%2B2j6G2ZW8-vfVg%40mail.gmail.com.