Ho usato TestNG e JUnit. Quali altri quadri sono là fuori? Cosa li rende speciali e / o diversi dagli altri?
Scala Specifiche ottiene il mio voto! : -)
Specs è un framework di test di sviluppo comportamentale scritto in Scala. Può essere usato per scrivere test per Java e Scala. È stato ispirato da RSpec - un framework di test molto popolare nel mondo di Ruby.
Un esempio di test scritto in Specifiche:
import org.specs._
object ElementSpecification extends Specification {
"A UniformElement" should {
"have a width equal to the passed value" in {
val ele = elem('x', 2, 3)
ele.width must be_==(2)
}
"have a height equal to the passed value" in {
val ele = elem('x', 2, 3)
ele.height must be_==(3)
}
"throw an IAE if passed a negative width" in {
elem('x', 2, 3) must throwA(new IllegalArgumentException)
}
}
}
Impressionante, non è vero? : -)
Suggerisco di utilizzare TestNG come framework di test delle unità di base per il progetto Java, perché TestNG è più avanzato nella parametrizzazione di test, test di dipendenza e test di suite ( Concetto di raggruppamento). TestNG è pensato per test di alto livello e test di integrazione complessi. La sua flessibilità è particolarmente utile con ampie suite di test. Inoltre, TestNG copre anche l'intera funzionalità core di JUnit4. Non ho motivo di usare più JUnit.
Posso consigliare scalacheck (facilmente confuso con scalatest).
Scrivi specifiche e il framework costruisce i test casualmente per te, e quando viola un assegno cercherà di semplificare il test, per trovare il modo più semplice per fallire.
Esempio di codice dal sito web:
object StringSpecification extends Properties("String") {
property("startsWith") = Prop.forAll((a: String, b: String) => (a+b).startsWith(a))
// Is this really always true?
property("concat") = Prop.forAll((a: String, b: String) =>
(a+b).length > a.length && (a+b).length > b.length
)
property("substring") = Prop.forAll((a: String, b: String) =>
(a+b).substring(a.length) == b
)
}
Un intero nuovo mondo di framework di test per Java esiste tramite JRuby. Per esempio: Test :: Unità, RSpec, Shoulda, ZenTest, RSPec Mock, Mocha e Cetriolo.
Penso che sia bello scrivere test Java nell'elegante linguaggio Ruby. Naturalmente, questo dipende se hai voglia di avere più lingue nel tuo SCM.
Se ti serve per scegliere un quadro di test unitario, ti suggerirei quanto segue:
Scegli quello che usa il resto del tuo team.
Se il tuo team non ne usa uno, o non hai una squadra, usa quello che l'IDE supporta in modo predefinito nella configurazione predefinita.
Se non hai ancora deciso, inizia con JUnit 4, che è lo standard di fatto.
Con le recenti versioni di JUnit, Hamcrest è stato integrato nella libreria. Hamcrest aggiunge ulteriori matcher che migliorano la leggibilità, ma altrimenti non modifica la semantica dei test. Potrebbe quindi essere una buona aggiunta per la configurazione del test.
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
...
Person tom = new Person("Tom");
Person jerry = new Person("Jerry");
assertThat(tom, is(not(equalTo(jerry))));
Leggi altre domande sui tag unit-testing java scala