Não consigo entender como o JUnit 4.8 deve funcionar com os matchers Hamcrest. Existem alguns matchers definidos dentro junit-4.8.jar
de org.hamcrest.CoreMatchers
. Ao mesmo tempo, existem alguns outros matchers hamcrest-all-1.1.jar
em org.hamcrest.Matchers
. Então, para onde ir? Devo incluir explicitamente o JAR do hamcrest no projeto e ignorar os correspondentes fornecidos pelo JUnit?
Em particular, estou interessado no empty()
matcher e não consigo encontrá-lo em nenhum desses potes. Eu preciso de mais alguma coisa? :)
E uma questão filosófica: por que JUnit incluiu o org.hamcrest
pacote em sua própria distribuição em vez de nos encorajar a usar a biblioteca original do hamcrest?
org.hamcrest.Matchers.empty()
está localizado? Você poderia fornecer um link para o arquivo JAR?Se estiver usando um Hamcrest com uma versão maior ou igual a 1.2, você deve usar o
junit-dep.jar
. Este jar não tem classes Hamcrest e, portanto, você evita problemas de carregamento de classe.Desde o JUnit 4.11, o
junit.jar
próprio não tem classes Hamcrest. Não há necessidade dejunit-dep.jar
mais.fonte
Não respondendo exatamente à sua pergunta, mas você definitivamente deve tentar a API de asserções fluentes do FEST-Assert . Ele está competindo com o Hamcrest, mas tem uma API muito mais fácil com apenas uma importação estática necessária. Aqui está o código fornecido por cpater usando FEST:
EDITAR: Coordenadas Maven:
fonte
Além disso, se JUnit 4.1.1 + Hamcrest 1.3 + Mockito 1.9.5 estiver sendo usado, certifique-se de que o mockito-all não seja usado. Ele contém as classes principais do Hamcrest. Em vez disso, use o mockito-core. A configuração abaixo funciona:
fonte
Como as versões estão mudando o tempo todo, estou postando para que as pessoas saibam que, a partir de 2 de dezembro de 2014, as instruções em http://www.javacodegeeks.com/2014/03/how-to-test-dependencies-in -a-maven-project-junit-mockito-hamcrest-assertj.html funcionou para mim. Eu não usei AssertJ, porém, apenas estes:
fonte
Eu acho que é porque eles queriam
assertThat
fazer parte do JUnit. Isso significa que aAssert
classe precisa importar aorg.hamcrest.Matcher
interface e não pode fazer isso a menos que JUnit dependa de Hamcrest ou inclua (pelo menos parte de) Hamcrest. E acho que incluir parte dele foi mais fácil, de modo que JUnit pudesse ser usado sem quaisquer dependências.fonte
Em 2018, usando a maioria das bibliotecas modernas:
fonte
Tanto o JUnit-4.12 quanto o JUnit-Dep-4.10 têm dependências do Hamcrest de acordo com os respectivos arquivos .xml.
Uma investigação mais aprofundada mostra que, embora a dependência tenha sido feita nos arquivos .xml, a origem e as classes nos jars. Isso parece ser uma forma de excluir a dependência em build.gradle ... testá-lo para manter tudo limpo.
Apenas um fyi
fonte