gojuno / minimock

Powerful mock generation tool for Go programming language
MIT License
577 stars 38 forks source link

no new variables on left side of := #40

Closed o1egl closed 4 years ago

o1egl commented 4 years ago

Generates incorrect code if function has params param.

Example:

type I interface {
    F(params []int) int
}

Output:


// F implements a.I
func (mmF *IMock) F(params []int) (i1 int) {
    mm_atomic.AddUint64(&mmF.beforeFCounter, 1)
    defer mm_atomic.AddUint64(&mmF.afterFCounter, 1)

    if mmF.inspectFuncF != nil {
        mmF.inspectFuncF(params)
    }

    params := &IMockFParams{params}

    // Record call args
    mmF.FMock.mutex.Lock()
    mmF.FMock.callArgs = append(mmF.FMock.callArgs, params)
    mmF.FMock.mutex.Unlock()

    for _, e := range mmF.FMock.expectations {
        if minimock.Equal(e.params, params) {
            mm_atomic.AddUint64(&e.Counter, 1)
            return e.results.i1
        }
    }

    if mmF.FMock.defaultExpectation != nil {
        mm_atomic.AddUint64(&mmF.FMock.defaultExpectation.Counter, 1)
        want := mmF.FMock.defaultExpectation.params
        got := IMockFParams{params}
        if want != nil && !minimock.Equal(*want, got) {
            mmF.t.Errorf("IMock.F got unexpected parameters, want: %#v, got: %#v%s\n", *want, got, minimock.Diff(*want, got))
        }

        results := mmF.FMock.defaultExpectation.results
        if results == nil {
            mmF.t.Fatal("No results are set for the IMock.F")
        }
        return (*results).i1
    }
    if mmF.funcF != nil {
        return mmF.funcF(params)
    }
    mmF.t.Fatalf("Unexpected call to IMock.F. %v", params)
    return
}```
hexdigest commented 4 years ago

Hi @o1egl

Thank you for posting the bug. Please check if v3.0.1 works for you. Alternatively you can try v2.1.9 if you don't adopted go modules yet.