A estrutura JUnit contém 2 Assert
classes (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.Assert
e org.junit.Assert
.
junit.framework.*
da lista suspensa de importação estática emEditor->General->Auto Import->Exclude from Import and Completion
.Respostas:
O método antigo (da JUnit 3) era marcar as classes de teste estendendo-se
junit.framework.TestCase
. Isso se herdoujunit.framework.Assert
e 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
Annotations
para marcar testes. Então você não precisa mais estenderTestCase
. 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 novaAssert
classe. É 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: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.junit
que segue melhor as convenções normais para nomeação de pacotes.fonte
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.
fonte
De fato, há uma mudança funcional:
org.junit.Assert
irá reclamar se você usar o argumento de doisassertEquals()
comfloat
oudouble
, enquantojunit.framework.Assert
silenciosamente o autobox.fonte
Eu acredito que eles estão refatorando de
junit.framework
paraorg.junit
ejunit.framework.Assert
são mantidos para compatibilidade com versões anteriores.fonte
Fiz uma comparação aproximada do código fonte e não há alterações sérias. Muitos comentários foram adicionados
org.junit.Assert
e algumas refatorações foram feitas. A única mudança é a comparação comArrays
. Existem algumas limpezas de código, mas não há (imho) nenhuma alteração funcional .fonte
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
IDE
ouProject
. Se você não possui projetos que usam o JUnit 3, pode permanecer com segurança no escopo do IDE.Posição de ajuste:
fonte