Another instance of the NoSuchMethodError for the JUnit & Hamcrest combination.
Offending code:
assertThat(dirReader.document(0).getFields(), hasItem(
    new FeatureMatcher<IndexableField, String>(equalTo("Patisnummer"), "Field key", "Field key") {
        @Override
        protected String featureValueOf(IndexableField actual) {
            return actual.name();
        } } ));
Commented lines 152–157 in IndexerTest.java (commit ac72ce)
Causes a NoSuchMethodError (see http://db.tt/qkkkTE78 for complete output):
java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
at org.hamcrest.FeatureMatcher.matchesSafely(FeatureMatcher.java:43)
at org.hamcrest.TypeSafeDiagnosingMatcher.matches(TypeSafeDiagnosingMatcher.java:55)
at org.hamcrest.core.IsCollectionContaining.matchesSafely(IsCollectionContaining.java:25)
at org.hamcrest.core.IsCollectionContaining.matchesSafely(IsCollectionContaining.java:14)
at org.hamcrest.TypeSafeDiagnosingMatcher.matches(TypeSafeDiagnosingMatcher.java:55)
at org.junit.Assert.assertThat(Assert.java:770)
at org.junit.Assert.assertThat(Assert.java:736)
at indexer.IndexerTest.testIndexContainsField(IndexerTest.java:152)
The setup:
- JUnit 4.11
- Hamcrest 1.3
- Using Maven's surefire plugin (version 2.14), which uses its JUnitCoreProvider
- Java 7 (OpenJDK)
- See pom (commit ac72ce)
Background:
A NoSuchMethodError is caused by (compiled) classes that call non existing methods.  The specific case of describeMismatch and the JUnit + Hamcrest combination is often caused by an incompatibility between Hamcrest classes included in JUnit and versions of those classes in the Hamcrest library.
Attempts to solve the NoSuchMethodError:
- The pom contains an explicit dependency on Hamcrest-library 1.3, Hamcrest-core 1.3, and JUnit 4.11, (in that order) as suggested by Garrett Hall in answer to Getting "NoSuchMethodError: org.hamcrest.Matcher.describeMismatch" when running test in IntelliJ 10.5 
- According to the JUnit documentation the JUnit 4.11 Maven dependency does no longer include compiled Hamcrest classes, instead it has a dependency on Hamcrest-core 1.3; so the - NoSuchMethodErrorshould not occur.
- Checking the dependency tree with - mvn dependency:treeas suggested by Dan in answer to junit and hamcrest declaration shows the explicit dependencies on Hamcrest 1.3 and JUnit 4.11 and no other dependencies to those files (see http://db.tt/C2OfTDJB for the complete output).
- In another test the - NoSuchMethodErrorwas avoided by using:- assertThat( "Zylab detector not available", d.getDetectors(), hasItem(Matchers.<Detector>instanceOf(ZylabMetadataXmlDetector.class)));- In lines 120–123 of IndexerTest.java (commit ac72ce) instead of the more obvious: - assertThat( "Zylab detector not available", d.getDetectors(), hasItem(isA(ZylabMetadataDetector.class));- I'm uncertain whether the explicit type parameter - <Detector>, using- instanceOfinstead of- isA, the explicit reference to Hamcrest's- Matchers, or a combination of those avoided the- NoSuchMethodException; after fiddling around and trying different things it worked.
- Using explicit type parameters did not solve/avoid the error. 
- Using a class derived from - BaseMatcherinstead of- FeatureMatcherdid not solve/avoid the error.
 
     
     
     
     
     
     
     
    