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.

Reply via email to