15. října 2010

jUnit a hamcrest - na pořadí v pom.xml záleží

Pro testování používám jUnit a mojí oblíbenou knihovnu hamcrest. Hamcrest je již nějakou dobu součástí jUnit - takže člověk si může vybrat používat pouze jUnit včetně hamcrestu (core) a nebo jUnit a k tomu si dotáhnout celý hamcrest (all).

Já jsem zvolil druhou variantu a dlouho jsem řešil ten problém, že se mi špatně vypisovala chyba assertu. Vždy když nějaká podmínka nebyla splněna, tak se mi zobrazila tato chyba:

java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/DescriptionV

Zjistil jsem, že řešení je jednoduché - je jen potřeba mít správné pořadí závislostí v pom.xml. Nejdříve mít referenci na hamcrest-all a pak teprve na jUnit.

<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>xmlunit</groupId>
<artifactId>xmlunit</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>2.5.6</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.8.2</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>

Odkaz na relevantní blogy: