diferenças entre 2 classes JUnit Assert

257

A estrutura JUnit contém 2 Assertclasses (em pacotes diferentes, obviamente) e os métodos em cada uma parecem ser muito semelhantes. Alguém pode explicar por que isso é?

As classes às quais me refiro são: junit.framework.Asserte org.junit.Assert.

Dónal
fonte
8
No Intellij IDEA, você pode excluir junit.framework.*da lista suspensa de importação estática em Editor->General->Auto Import->Exclude from Import and Completion.
Jordanpg

Respostas:

239

O método antigo (da JUnit 3) era marcar as classes de teste estendendo-se junit.framework.TestCase. Isso se herdou junit.framework.Asserte sua classe de teste ganhou a capacidade de chamar os métodos de afirmação dessa maneira.

Desde a versão 4 do JUnit, a estrutura usa Annotationspara marcar testes. Então você não precisa mais estender TestCase. Mas isso significa que os métodos de afirmação não estão disponíveis. Mas você pode fazer uma importação estática da nova Assertclasse. É por isso que todos os métodos de declaração na nova classe são métodos estáticos. Então você pode importá-lo desta maneira:

import static org.junit.Assert.*;

Após essa importação estática, você pode usar esses métodos sem prefixo.

No reprojeto, eles também foram para o novo pacote org.junitque segue melhor as convenções normais para nomeação de pacotes.

Mnementh
fonte
6
Esta resposta não está totalmente correta, você pode fazer importações estáticas de métodos na classe junit.framework.Assert e org.junit.Assert. No entanto, é provavelmente uma boa ideia manter a classe org.junit.Assert, pois é mais nova, ligeiramente reescrita e provavelmente deve ser substituída.
Glenn Bech
75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Prefira o mais novo, especialmente ao executar o JDK5 e superior, com suporte para anotação.

ReneS
fonte
19

De fato, há uma mudança funcional: org.junit.Assertirá reclamar se você usar o argumento de dois assertEquals()com floatou double, enquanto junit.framework.Assertsilenciosamente o autobox.

David Moles
fonte
5

Eu acredito que eles estão refatorando de junit.frameworkpara org.junite junit.framework.Assertsão mantidos para compatibilidade com versões anteriores.

esplêndido
fonte
3

Fiz uma comparação aproximada do código fonte e não há alterações sérias. Muitos comentários foram adicionados org.junit.Asserte algumas refatorações foram feitas. A única mudança é a comparação com Arrays. Existem algumas limpezas de código, mas não há (imho) nenhuma alteração funcional .

guerda
fonte
1
Acredito que @David Moles está correto, e isso seria uma mudança funcional.
orbfish
1

No Android Studio (e também no IntelliJ), você pode excluir globalmente junit.framework da proposta de importação automática.

Você pode definir o escopo entre IDEouProject . Se você não possui projetos que usam o JUnit 3, pode permanecer com segurança no escopo do IDE.

Posição de ajuste:

Preferências -> Editor -> Geral -> Importação Automática

insira a descrição da imagem aqui

MatPag
fonte