testify icon indicating copy to clipboard operation
testify copied to clipboard

mock: AssertCalled confuses separate method calls in assert message

Open mortenlj opened this issue 3 years ago • 3 comments

I have the following setup:

	mockHandler.
		On("Apply",
			mock.AnythingOfType("*v1.ReplicaSet"),
			mock.AnythingOfType("*v1.Secret"),
			mock.Anything).
		Return(nil).
	mockHandler.
		On("Cleanup", mock.AnythingOfType("*v1.Secret"), mock.Anything).
		Return(nil)

After exercising my code, I want to assert that Cleanup was called:

mockHandler.AssertCalled(t, "Cleanup", mock.AnythingOfType("*v1.Secret"), mock.Anything)

In the case where my code only has called Apply, and not called Cleanup, I get an error like this:

        	Test:       	TestManager_ApplyFailed
        	Messages:   	Expected "Cleanup" to have been called with:
        	            	[*v1.Secret mock.Anything]
        	            	but actual calls were:
        	            	        [nil &Secret{ObjectMeta:{      0 0001-01-01 00:00:00 +0000 UTC <nil> <nil> map[] map[one:1] [] []  []},Data:map[string][]byte{},Type:,StringData:map[string]string{},Immutable:nil,} <nil>]

This seems weird, because Cleanup does not take those arguments. The explanation is that the "actual calls" in this list are calls to Apply, which are not relevant when looking for calls of Cleanup. At the very least, the list of calls should mention the name of the method.

mortenlj avatar Jan 12 '22 13:01 mortenlj

Having the same issue. AssertCalled fails for the right reasons (for me it was a decimal type where 1^1 != 100^-2), but the inclusion of false calls got pretty annoying. Opened PR #1258

kleinerhund avatar Aug 23 '22 16:08 kleinerhund

Please provide a test case that shows the issue and that runs on go.dev/play. That will help to check (now or later) if this issue is already fixed or not.

dolmen avatar Oct 16 '23 17:10 dolmen

https://go.dev/play/p/0-0fONzBGR4

mortenlj avatar Oct 17 '23 10:10 mortenlj