Rather than using the matcher protocol directly (e.g. via `matches?` and `failure_message`), I prefer to see the matcher used as a user would use it:

``` ruby
expect {
  expect(time1).to eq(time2)
}.to fail_with(/1969-12-31 19:01:40.000102.*1969-12-31 19:01:40.000101/m)
```

Your spec focuses more on the implementation (e.g. the protocol methods being used) rather than the behavior (e.g. how the matcher behaves when used in a matcher expression).