Repository: stretchr/testify (go)

Issue:
Using error in Contains fails with confusing message
https://play.golang.org/p/u7Dfo4UnxZ0
```go
assert.Contains(t, "error string", errors.New("error"))
```
```
Error Trace:	prog.go:25
Error:      	"error string" does not contain "error"
Test:       	TestCaseA
```

Whereas this is what's needed to pass:
```diff
-assert.Contains(t, "error string", errors.New("error"))
+assert.Contains(t, "error string", errors.New("error").Error())
```

I would prefer if the failure message explained that it was an error type, otherwise it looks like a string does not contain another string: I've fallen foul to this in the past, and just spent 5-10mins again not realising that I needed to pass a `string` type as the 3rd argument.

It would be really nice to have the type printed here when the value isn't a `Stringer` =)

Pull request description:
Test for #913
Fixes #828

Patch:
diff --git a/assert/assertions.go b/assert/assertions.go
index 00ff8d2..7bedb20 100644
--- a/assert/assertions.go
+++ b/assert/assertions.go
@@ -760,10 +760,10 @@ func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bo
 
 	ok, found := includeElement(s, contains)
 	if !ok {
-		return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", s), msgAndArgs...)
+		return Fail(t, fmt.Sprintf("%#v could not be applied builtin len()", s), msgAndArgs...)
 	}
 	if !found {
-		return Fail(t, fmt.Sprintf("\"%s\" does not contain \"%s\"", s, contains), msgAndArgs...)
+		return Fail(t, fmt.Sprintf("%#v does not contain %#v", s, contains), msgAndArgs...)
 	}
 
 	return true


Test patch:
diff --git a/assert/assertions_test.go b/assert/assertions_test.go
index ef22bd2..b5e73ea 100644
--- a/assert/assertions_test.go
+++ b/assert/assertions_test.go
@@ -592,6 +592,18 @@ func TestContains(t *testing.T) {
 	}
 }
 
+func TestContainsFailMessage(t *testing.T) {
+
+	mockT := new(mockTestingT)
+
+	Contains(mockT, "Hello World", errors.New("Hello"))
+	expectedFail := "\"Hello World\" does not contain &errors.errorString{s:\"Hello\"}"
+	actualFail := mockT.errorString()
+	if !strings.Contains(actualFail, expectedFail) {
+		t.Errorf("Contains failure should include %q but was %q", expectedFail, actualFail)
+	}
+}
+
 func TestNotContains(t *testing.T) {
 
 	mockT := new(testing.T)