-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
Hey there, I encountered this when attempting to use require.Len
as shown below.
package tester_test
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestVeryLongSlice(t *testing.T) {
var bigSlice []string
for i := 0; i < 20000; i++ {
bigSlice = append(bigSlice, "hello")
}
require.Len(t, bigSlice, 10)
}
Output of test:
=== RUN TestVeryLongSlice
tester_test.go:15:
Error Trace: C:/Users/Fots/source/tester/tester/tester_test.go:15
Error:
Test: TestVeryLongSlice
--- FAIL: TestVeryLongSlice (0.00s)
FAIL
FAIL github.com/fgimian/tester/tester 0.150s
FAIL
I haven't quite figured out why this happens, although I can imagine the output would be impractically long anyway. Worst of all, the main assertion message is not displayed which is quite confusing (especially to someone new using the library, like me 😄).
Personally, I think that it would be best not to display the slice at all for the Len
function, and instead just display:
Should have X item(s), but has Y
However, I suspect my view on that may not be what some people want. The reason I think it is unwise to print the slice in any form, is that typically when many people are testing for the length of a slice, they may be comparing to a relatively large slice of items (e.g. the output of a mocked API call or similar).
An additional point that I believe has been discussed before is the inconsistency with argument ordering for the Len
function which takes the actual
first and expected
second.
Cheers
Fotis