-
Notifications
You must be signed in to change notification settings - Fork 34
Description
github.com/bytedance/mockey v1.2.14
go 1.24.4
运行命令: go test -gcflags="all=-l -N" -parallel=1
code:
func funcA() int {
return 0
}
func TestMock1(t *testing.T) {
mockey.PatchConvey("mock 1", t, func() {
convey.So(funcA(), convey.ShouldEqual, 0)
mockey.PatchConvey("mock 1 in", func() {
logz.Info().Msg("mock 1")
mockey.Mock(funcA).Return(1).Build()
convey.So(funcA(), convey.ShouldEqual, 1)
})
})
}
func TestMock2(t *testing.T) {
mockey.PatchConvey("mock 2", t, func() {
convey.So(funcA(), convey.ShouldEqual, 0)
mockey.PatchConvey("mock 2 in", func() {
//r := rand.IntN(100)
r := 2
mockey.Mock(funcA).Return(r).Build()
logz.Info().Msgf("%d", r)
convey.So(funcA(), convey.ShouldEqual, r)
})
})
}
TestMock1, TestMock2 单独运行都总是正确, 但整个文件一起跑测试时,结果不定
- 都正确通过测试
- mock 不符合预期, 比如:
Expected: 2
Actual: 0
(Should equal)! - 引发panic, 报错信息如下:
[convery_mock] (unit_test =) $ go test -gcflags="all=-l -N" -parallel=1
.09-28 18:24:45.098 INF convey_test.go:39 > mock 1
.
2 total assertions
.09-28 18:24:45.099 INF convey_test.go:53 > 2
runtime: g 5: unexpected return pc for nova/unittest/example/convery_mock.TestMock2.func1.1 called from 0x14000204130
stack: frame={sp:0x140002040e0, fp:0x140002041e0} stack=[0x14000200000,0x14000208000)
0x0000014000203fe0: 0x0000000000000000 0x00000001044fa801
0x0000014000203ff0: 0x000001400007df20 0x0000014000204038
0x0000014000204000: 0x00000001042d89cc <github.com/smartystreets/goconvey/convey.mustGetCurrentContext+0x000000000000004c> 0x000000010449c1e0
0x0000014000204010: 0x000001400007df20 0x0000000000000000
0x0000014000204020: 0x0000000000000000 0x000001400007df20
0x0000014000204030: 0x000001400007df20 0x0000014000204088
0x0000014000204040: 0x00000001042db6f4 <github.com/smartystreets/goconvey/convey.So+0x0000000000000034> 0x000000010443f899
0x0000014000204050: 0x0000000000000078 0x0000000000000000
0x0000014000204060: 0x0000000000000000 0x0000000000000000
0x0000014000204070: 0x000001400000f3a0 0x0000000000000000
0x0000014000204080: 0x0000000000000000 0x00000140002040d8
0x0000014000204090: 0x00000001044134a8 <nova/unittest/example/convery_mock.TestMock2.func1.1+0x0000000000000218> 0x0000000000000001
0x00000140002040a0: 0x0000014000132a80 0x00000140002040d8
0x00000140002040b0: 0x000000010441342c <nova/unittest/example/convery_mock.TestMock2.func1.1+0x000000000000019c> 0x0000000000000008
0x00000140002040c0: 0x000000010448ba40 0x0000014000132a00
0x00000140002040d0: 0x0000000000000000 0x0000000000000002
0x00000140002040e0: <0x0000014000204130 0x000000010448b540
0x00000140002040f0: 0x000000010445e020 0x00000001044f8028
0x0000014000204100: 0x0000014000023e90 0x0000000000000001
0x0000014000204110: 0x0000000000000001 0x0000014000023d90
0x0000014000204120: 0x0000000000000000 0x0000000000000001
0x0000014000204130: 0x000000010448b540 0x000000010445e030
0x0000014000204140: 0x0000014000132a80 0x000001400002e640
0x0000014000204150: 0x000001400002e640 0x0000000000000000
0x0000014000204160: 0x0000000000000000 0x0000000000000000
0x0000014000204170: 0x0000000000000000 0x000001400000f3a0
0x0000014000204180: 0x0000014000023e90 0x0000014000023e90
0x0000014000204190: 0x0000000000000001 0x0000000000000001
0x00000140002041a0: 0x000000010445e020 0x0000000000000001
0x00000140002041b0: 0x00000001044f7980 0x00000140002041d8
0x00000140002041c0: 0x000000010414b614 <runtime.reflectcall+0x0000000000000034> 0x000001400007e480
0x00000140002041d0: 0x0000000000000000 0x0000014000204218
0x00000140002041e0: >0x00000001041c7b30 <reflect.Value.call+0x0000000000000a00> 0x000001400007d410
0x00000140002041f0: 0x00000001044f7978 0x0000000000000000
0x0000014000204200: 0x0000000000000000 0x0000014000000000
0x0000014000204210: 0x00000140002045b8 0x0000014000204c88
0x0000014000204220: 0x00000001041c70e4 <reflect.Value.Call+0x0000000000000074> 0x0000000000000000
0x0000014000204230: 0x0000000000000008 0x0000000000000000
0x0000014000204240: 0x0000000000000000 0x0000000000000000
0x0000014000204250: 0x0000000000000000 0x0000000000000000
0x0000014000204260: 0x0000000000000000 0x0000000000000000
0x0000014000204270: 0x0000000000000000 0x0000000000000000
0x0000014000204280: 0x0000000000000000 0x0000000000000000
0x0000014000204290: 0x0000000000000000 0x0000000000000000
0x00000140002042a0: 0x0000000000000000 0x0000000000000000
0x00000140002042b0: 0x0000000000000000 0x0000000000000000
0x00000140002042c0: 0x0000000000000000 0x0000000000000000
0x00000140002042d0: 0x000001400007e480 0x0000000000000000
fatal error: unknown caller pc
runtime stack:
runtime.throw({0x104430809?, 0x104670000?})
/usr/local/go/src/runtime/panic.go:1101 +0x38 fp=0x16bd2efe0 sp=0x16bd2efb0 pc=0x104142018
runtime.(unwinder).next(0x16bd2f0b0)
/usr/local/go/src/runtime/traceback.go:470 +0x2e0 fp=0x16bd2f070 sp=0x16bd2efe0 pc=0x1041333e0
runtime.(_panic).nextFrame.func1()
/usr/local/go/src/runtime/panic.go:969 +0x84 fp=0x16bd2f130 sp=0x16bd2f070 pc=0x10410d894
runtime.systemstack(0x16bd1f170)
/usr/local/go/src/runtime/asm_arm64.s:244 +0x6c fp=0x16bd2f140 sp=0x16bd2f130 pc=0x1041470bc
goroutine 5 gp=0x14000003500 m=0 mp=0x1046e6de0 [running]:
runtime.systemstack_switch()
/usr/local/go/src/runtime/asm_arm64.s:201 +0x8 fp=0x14000203ee0 sp=0x14000203ed0 pc=0x104147038
runtime.(_panic).nextFrame(0x28?)
/usr/local/go/src/runtime/panic.go:942 +0x60 fp=0x14000203f20 sp=0x14000203ee0 pc=0x10410d7e0
runtime.(_panic).start(0x14000203f80, 0x1042d8848, 0x14000204000)
/usr/local/go/src/runtime/panic.go:856 +0x1b8 fp=0x14000203f50 sp=0x14000203f20 pc=0x10410d568
panic({0x10449c1e0?, 0x1400007df20?})
/usr/local/go/src/runtime/panic.go:786 +0xe0 fp=0x14000204000 sp=0x14000203f50 pc=0x104141ce0
github.com/smartystreets/goconvey/convey.conveyPanic({0x10443f899, 0x78}, {0x0, 0x0, 0x0})
/Users/cloud/go/pkg/mod/github.com/smartystreets/[email protected]/convey/context.go:20 +0xa8 fp=0x14000204040 sp=0x14000204000 pc=0x1042d8848
github.com/smartystreets/goconvey/convey.mustGetCurrentContext()
/Users/cloud/go/pkg/mod/github.com/smartystreets/[email protected]/convey/context.go:52 +0x4c fp=0x14000204090 sp=0x14000204040 pc=0x1042d89cc
github.com/smartystreets/goconvey/convey.So({0x10448b540, 0x10445e020}, 0x1044f8028, {0x14000023e90, 0x1, 0x1})
/Users/cloud/go/pkg/mod/github.com/smartystreets/[email protected]/convey/doc.go:126 +0x34 fp=0x140002040e0 sp=0x14000204090 pc=0x1042db6f4
nova/unittest/example/convery_mock.TestMock2.func1.1()
/Users/cloud/Code/work/platform/common/nova/unittest/example/convery_mock/convey_test.go:54 +0x218 fp=0x140002041e0 sp=0x140002040e0 pc=0x1044134a8
runtime: g 5: unexpected return pc for nova/unittest/example/convery_mock.TestMock2.func1.1 called from 0x14000204130
stack: frame={sp:0x140002040e0, fp:0x140002041e0} stack=[0x14000200000,0x14000208000)
0x0000014000203fe0: 0x0000000000000000 0x00000001044fa801
0x0000014000203ff0: 0x000001400007df20 0x0000014000204038
0x0000014000204000: 0x00000001042d89cc <github.com/smartystreets/goconvey/convey.mustGetCurrentContext+0x000000000000004c> 0x000000010449c1e0
0x0000014000204010: 0x000001400007df20 0x0000000000000000
0x0000014000204020: 0x0000000000000000 0x000001400007df20
0x0000014000204030: 0x000001400007df20 0x0000014000204088
0x0000014000204040: 0x00000001042db6f4 <github.com/smartystreets/goconvey/convey.So+0x0000000000000034> 0x000000010443f899
0x0000014000204050: 0x0000000000000078 0x0000000000000000
0x0000014000204060: 0x0000000000000000 0x0000000000000000
0x0000014000204070: 0x000001400000f3a0 0x0000000000000000
0x0000014000204080: 0x0000000000000000 0x00000140002040d8
0x0000014000204090: 0x00000001044134a8 <nova/unittest/example/convery_mock.TestMock2.func1.1+0x0000000000000218> 0x0000000000000001
0x00000140002040a0: 0x0000014000132a80 0x00000140002040d8
0x00000140002040b0: 0x000000010441342c <nova/unittest/example/convery_mock.TestMock2.func1.1+0x000000000000019c> 0x0000000000000008
0x00000140002040c0: 0x000000010448ba40 0x0000014000132a00
0x00000140002040d0: 0x0000000000000000 0x0000000000000002
0x00000140002040e0: <0x0000014000204130 0x000000010448b540
0x00000140002040f0: 0x000000010445e020 0x00000001044f8028
0x0000014000204100: 0x0000014000023e90 0x0000000000000001
0x0000014000204110: 0x0000000000000001 0x0000014000023d90
0x0000014000204120: 0x0000000000000000 0x0000000000000001
0x0000014000204130: 0x000000010448b540 0x000000010445e030
0x0000014000204140: 0x0000014000132a80 0x000001400002e640
0x0000014000204150: 0x000001400002e640 0x0000000000000000
0x0000014000204160: 0x0000000000000000 0x0000000000000000
0x0000014000204170: 0x0000000000000000 0x000001400000f3a0
0x0000014000204180: 0x0000014000023e90 0x0000014000023e90
0x0000014000204190: 0x0000000000000001 0x0000000000000001
0x00000140002041a0: 0x000000010445e020 0x0000000000000001
0x00000140002041b0: 0x00000001044f7980 0x00000140002041d8
0x00000140002041c0: 0x000000010414b614 <runtime.reflectcall+0x0000000000000034> 0x000001400007e480
0x00000140002041d0: 0x0000000000000000 0x0000014000204218
0x00000140002041e0: >0x00000001041c7b30 <reflect.Value.call+0x0000000000000a00> 0x000001400007d410
0x00000140002041f0: 0x00000001044f7978 0x0000000000000000
0x0000014000204200: 0x0000000000000000 0x0000014000000000
0x0000014000204210: 0x00000140002045b8 0x0000014000204c88
0x0000014000204220: 0x00000001041c70e4 <reflect.Value.Call+0x0000000000000074> 0x0000000000000000
0x0000014000204230: 0x0000000000000008 0x0000000000000000
0x0000014000204240: 0x0000000000000000 0x0000000000000000
0x0000014000204250: 0x0000000000000000 0x0000000000000000
0x0000014000204260: 0x0000000000000000 0x0000000000000000
0x0000014000204270: 0x0000000000000000 0x0000000000000000
0x0000014000204280: 0x0000000000000000 0x0000000000000000
0x0000014000204290: 0x0000000000000000 0x0000000000000000
0x00000140002042a0: 0x0000000000000000 0x0000000000000000
0x00000140002042b0: 0x0000000000000000 0x0000000000000000
0x00000140002042c0: 0x0000000000000000 0x0000000000000000
0x00000140002042d0: 0x000001400007e480 0x0000000000000000
created by testing.(*T).Run in goroutine 1
/usr/local/go/src/testing/testing.go:1851 +0x744
goroutine 1 gp=0x140000021c0 m=nil [chan receive]:
runtime.gopark(0x1044f7a48, 0x140000724c0, 0xe, 0x7, 0x2)
/usr/local/go/src/runtime/proc.go:435 +0xdc fp=0x14000145350 sp=0x14000145320 pc=0x10414214c
runtime.chanrecv(0x14000072460, 0x1400014544e, 0x1)
/usr/local/go/src/runtime/chan.go:664 +0x2b4 fp=0x140001453d0 sp=0x14000145350 pc=0x1040dea24
runtime.chanrecv1(0x1046ddac0?, 0x10448b300?)
/usr/local/go/src/runtime/chan.go:506 +0x14 fp=0x14000145400 sp=0x140001453d0 pc=0x1040de764
testing.(*T).Run(0x140000036c0, {0x10442c117, 0x9}, 0x1044f78d0)
/usr/local/go/src/testing/testing.go:1859 +0x764 fp=0x14000145670 sp=0x14000145400 pc=0x104214464
testing.runTests.func1(0x14000003180)
/usr/local/go/src/testing/testing.go:2279 +0x98 fp=0x14000145710 sp=0x14000145670 pc=0x104217ad8
testing.tRunner(0x14000003180, 0x14000145900)
/usr/local/go/src/testing/testing.go:1792 +0x1a8 fp=0x14000145800 sp=0x14000145710 pc=0x104212d68
testing.runTests(0x1400000c1e0, {0x1046c6e40, 0x2, 0x2}, {0xc22e61b145dd4438, 0x8bb2e3accd, 0x1046e6220})
/usr/local/go/src/testing/testing.go:2277 +0x520 fp=0x14000145990 sp=0x14000145800 pc=0x104217930
testing.(*M).Run(0x14000102a00)
/usr/local/go/src/testing/testing.go:2142 +0xb08 fp=0x14000145ed0 sp=0x14000145990 pc=0x104215798
main.main()
_testmain.go:47 +0x98 fp=0x14000145f60 sp=0x14000145ed0 pc=0x1044138f8
runtime.main()
/usr/local/go/src/runtime/proc.go:283 +0x224 fp=0x14000145fd0 sp=0x14000145f60 pc=0x104110ba4
runtime.goexit({})
/usr/local/go/src/runtime/asm_arm64.s:1223 +0x4 fp=0x14000145fd0 sp=0x14000145fd0 pc=0x104149434
goroutine 17 gp=0x14000082380 m=nil [force gc (idle)]:
runtime.gopark(0x1044f7d50, 0x1046dd270, 0x11, 0xa, 0x1)
/usr/local/go/src/runtime/proc.go:435 +0xdc fp=0x1400004c770 sp=0x1400004c740 pc=0x10414214c
runtime.goparkunlock(0x1046dd270?, 0x0?, 0x0?, 0x0?)
/usr/local/go/src/runtime/proc.go:441 +0x34 fp=0x1400004c7a0 sp=0x1400004c770 pc=0x104111034
runtime.forcegchelper()
/usr/local/go/src/runtime/proc.go:348 +0xb4 fp=0x1400004c7d0 sp=0x1400004c7a0 pc=0x104110f04
runtime.goexit({})
/usr/local/go/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004c7d0 sp=0x1400004c7d0 pc=0x104149434
created by runtime.init.7 in goroutine 1
/usr/local/go/src/runtime/proc.go:336 +0x24
goroutine 18 gp=0x14000082540 m=nil [GC sweep wait]:
runtime.gopark(0x1044f7d50, 0x1046dd920, 0xc, 0x9, 0x1)
/usr/local/go/src/runtime/proc.go:435 +0xdc fp=0x1400004cf40 sp=0x1400004cf10 pc=0x10414214c
runtime.goparkunlock(0x1046dd920?, 0x0?, 0x0?, 0x0?)
/usr/local/go/src/runtime/proc.go:441 +0x34 fp=0x1400004cf70 sp=0x1400004cf40 pc=0x104111034
runtime.bgsweep(0x14000090000)
/usr/local/go/src/runtime/mgcsweep.go:276 +0x9c fp=0x1400004cfb0 sp=0x1400004cf70 pc=0x1040f938c
runtime.gcenable.gowrap1()
/usr/local/go/src/runtime/mgc.go:204 +0x28 fp=0x1400004cfd0 sp=0x1400004cfb0 pc=0x1040edc28
runtime.goexit({})
/usr/local/go/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004cfd0 sp=0x1400004cfd0 pc=0x104149434
created by runtime.gcenable in goroutine 1
/usr/local/go/src/runtime/mgc.go:204 +0x6c
goroutine 19 gp=0x14000082700 m=nil [GC scavenge wait]:
runtime.gopark(0x1044f7d50, 0x1046e6320, 0xd, 0xa, 0x2)
/usr/local/go/src/runtime/proc.go:435 +0xdc fp=0x1400004d720 sp=0x1400004d6f0 pc=0x10414214c
runtime.goparkunlock(0x1046e6320?, 0x70?, 0xc4?, 0x1?)
/usr/local/go/src/runtime/proc.go:441 +0x34 fp=0x1400004d750 sp=0x1400004d720 pc=0x104111034
runtime.(*scavengerState).park(0x1046e6320)
/usr/local/go/src/runtime/mgcscavenge.go:425 +0x4c fp=0x1400004d780 sp=0x1400004d750 pc=0x1040f6b1c
runtime.bgscavenge(0x14000090000)
/usr/local/go/src/runtime/mgcscavenge.go:653 +0x44 fp=0x1400004d7b0 sp=0x1400004d780 pc=0x1040f7054
runtime.gcenable.gowrap2()
/usr/local/go/src/runtime/mgc.go:205 +0x28 fp=0x1400004d7d0 sp=0x1400004d7b0 pc=0x1040edbc8
runtime.goexit({})
/usr/local/go/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400004d7d0 sp=0x1400004d7d0 pc=0x104149434
created by runtime.gcenable in goroutine 1
/usr/local/go/src/runtime/mgc.go:205 +0xac
goroutine 2 gp=0x14000002e00 m=nil [finalizer wait]:
runtime.gopark(0x1044f7aa0, 0x10470cdf0, 0x10, 0xa, 0x1)
/usr/local/go/src/runtime/proc.go:435 +0xdc fp=0x14000050590 sp=0x14000050560 pc=0x10414214c
runtime.runfinq()
/usr/local/go/src/runtime/mfinal.go:196 +0xf0 fp=0x140000507d0 sp=0x14000050590 pc=0x1040ecd10
runtime.goexit({})
/usr/local/go/src/runtime/asm_arm64.s:1223 +0x4 fp=0x140000507d0 sp=0x140000507d0 pc=0x104149434
created by runtime.createfing in goroutine 1
/usr/local/go/src/runtime/mfinal.go:166 +0x4c
goroutine 3 gp=0x14000002fc0 m=nil [chan receive]:
runtime.gopark(0x1044f7a48, 0x14000072140, 0xe, 0x7, 0x2)
/usr/local/go/src/runtime/proc.go:435 +0xdc fp=0x14000050ee0 sp=0x14000050eb0 pc=0x10414214c
runtime.chanrecv(0x140000720e0, 0x0, 0x1)
/usr/local/go/src/runtime/chan.go:664 +0x2b4 fp=0x14000050f60 sp=0x14000050ee0 pc=0x1040dea24
runtime.chanrecv1(0x0?, 0x0?)
/usr/local/go/src/runtime/chan.go:506 +0x14 fp=0x14000050f90 sp=0x14000050f60 pc=0x1040de764
runtime.unique_runtime_registerUniqueMapCleanup.func2(0x1044f95e8)
/usr/local/go/src/runtime/mgc.go:1796 +0x2c fp=0x14000050fb0 sp=0x14000050f90 pc=0x10413deec
runtime.unique_runtime_registerUniqueMapCleanup.gowrap1()
/usr/local/go/src/runtime/mgc.go:1799 +0x30 fp=0x14000050fd0 sp=0x14000050fb0 pc=0x1040f0570
runtime.goexit({})
/usr/local/go/src/runtime/asm_arm64.s:1223 +0x4 fp=0x14000050fd0 sp=0x14000050fd0 pc=0x104149434
created by unique.runtime_registerUniqueMapCleanup in goroutine 1
/usr/local/go/src/runtime/mgc.go:1794 +0x78
exit status 2
FAIL nova/unittest/example/convery_mock 0.208s