bytedance / mockey

a simple and easy-to-use golang mock library
Apache License 2.0
556 stars 22 forks source link

When will the `function is too short to patch` error be reported? #38

Closed Ericwww closed 9 months ago

Ericwww commented 9 months ago

Describe the bug

We read the README and fount if inline or compilation optimization is not disabled, an error (maybe panic) "function is too short to patch" will be reported.

We want to use this feature in our CI/CD process to remind developers to turn off inline and compilation optimizations.

To Reproduce

Steps to reproduce the behavior:

  1. Prepare a package called test-mockey
  2. write mockey.go as below
    
    package test_mockey

func NeedMock() string {return "origin"}

3. wirte mockey_test.go as below
```golang
package test_mockey

import (
    "github.com/agiledragon/gomonkey"
    "testing"

    "github.com/bytedance/mockey"
)

func TestMockey(t *testing.T) {
    mocker := mockey.Mock(NeedMock).Return("mocked by mockey").Build()
    defer mocker.UnPatch()
    println(NeedMock())
    t.Log("aaaa")
}

func TestGoMonkey(t *testing.T) {
    patches := gomonkey.ApplyFunc(NeedMock, func() string {
        return "mocked by gomonkey"
    })
    defer patches.Reset()
    println(NeedMock())
    t.Log("aaaa")
}

Expected behavior

Throw "function is too short to patch" error or panic

Screenshots

GOROOT=C:\Program Files\Go #gosetup
GOPATH=C:\Users\*******\go #gosetup
"C:\Program Files\Go\bin\go.exe" test -c -o C:\Users\*******\AppData\Local\Temp\GoLand\___2go_test_awesomeProject1_test_mockey.test.exe awesomeProject1/test-mockey #gosetup
"C:\Program Files\Go\bin\go.exe" tool test2json -t C:\Users\*******\AppData\Local\Temp\GoLand\___2go_test_awesomeProject1_test_mockey.test.exe -test.v -test.paniconexit0 #gosetup
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  X0  [RSI]   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RSI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   MOVUPS  [RDI]   X0  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   ADD RDI 0x10    <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffcopy>   RET <nil>   <nil>   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: duffcopy(2450720,2451616)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI]   X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x10]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x20]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   MOVUPS  [RDI+0x30]  X15 <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   LEA RDI [RDI+0x40]  <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: <duffzero>   RET <nil>   <nil>   <nil>   <nil>   %!v(MISSING)
[MOCKEY] init: duffzero(2450336,2450704)
=== RUN   TestMockey
[MOCKEY] Disassemble: inst: LEA RAX, [RIP+0x3677e]
[MOCKEY] Disassemble: inst: MOV EBX, 0x6
[MOCKEY] PatchValue: hook code len(12), cuttingIdx(12)
[MOCKEY] 3190848 added
origin
    mockey_test.go:14: aaaa
[MOCKEY] 3190848 removed
--- PASS: TestMockey (0.00s)
=== RUN   TestGoMonkey
origin
    mockey_test.go:23: aaaa
--- PASS: TestGoMonkey (0.00s)
PASS

Process finished with the exit code 0

Mockey version:

v1.2.6

Environment:

image

Additional context

Will be provided if asked

Ericwww commented 9 months ago

简单来说,我们想利用function is too short to patch 这个error或者panic来完善开发流程,达到提醒开发者禁用内联和编译优化的目的。但是在实际测试使用的时候,发现在不禁用内联和编译优化的情况下,Mock确实没有生效,但是没有相关error或者panic产生来提醒开发者

Sychorius commented 9 months ago

简单来说,我们想利用function is too short to patch 这个error或者panic来完善开发流程,达到提醒开发者禁用内联和编译优化的目的。但是在实际测试使用的时候,发现在不禁用内联和编译优化的情况下,Mock确实没有生效,但是没有相关error或者panic产生来提醒开发者

不建议用function的长度判断是否开了內联优化,这个取决于编译器的行为 提供一个思路:可以通过分析一些简单函数调用的机器码来判断(但并不是很推荐这么做),比如这样:


func fn() {
}
func fn2() {
    fn()
}
func TestGCFlagsNlArm64(t *testing.T) {
    var asm []byte
    header := (*reflect.SliceHeader)(unsafe.Pointer(&asm))
    header.Data = reflect.ValueOf(fn2).Pointer()
    header.Len = 1000
    header.Cap = 1000

    Nl := false
    pos := 0
    for pos < len(asm) {
        inst, _ := arm64asm.Decode(asm[pos:])
        if inst.Op == arm64asm.RET {
            break
        }
        if inst.Op == arm64asm.BL {
            Nl = true
            break
        }
        pos += int(unsafe.Sizeof(inst.Enc))
    }
    fmt.Println(Nl)
}