it-swarm-es.com

¿Qué marcos de pruebas unitarias existen para Java?

He usado TestNG y JUnit. ¿Qué otros marcos existen? ¿Qué los hace especiales y/o diferentes al resto?

7
codeyoung

Scala Especificaciones ¡recibe mi voto! :-)

Specs es un marco de pruebas de desarrollo basado en el comportamiento escrito en Scala. Se puede usar para escribir pruebas para Java y Scala. Se inspiró en RSpec - un marco de prueba muy popular en Ruby = mundo.


Una prueba de ejemplo escrita en especificaciones:

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)
    }
  }
}

Impresionante, ¿no? :-)

12
missingfaktor

Sugiero usar TestNG como marco de prueba de unidad central para Java, porque TestNG es más avanzado en la parametrización de pruebas, pruebas de dependencia y pruebas de conjuntos (concepto de agrupación). está diseñado para pruebas de alto nivel y pruebas de integración complejas. Su flexibilidad es especialmente útil con grandes conjuntos de pruebas. Además, TestNG también cubre toda la funcionalidad principal de JUnit4. Simplemente ya no es motivo para que use JUnit.

6
Sankar Ganesh

Un mundo completamente nuevo de marcos de prueba para Java existe a través de JRuby. Por ejemplo: Test :: Unit, RSpec, Shoulda, ZenTest, RSpec Mocks, Mocha y Cucumber.

Creo que es genial escribir pruebas de Java en el elegante lenguaje Ruby. Por supuesto, esto depende de si estás de humor para tener varios idiomas en tu SCM.

2
Chiron

Puedo recomendar scalacheck (se confunde fácilmente con scalatest).

Usted escribe Especificaciones y el marco construye los casos de prueba aleatoriamente para usted, y al violar una verificación, intentará simplificar la prueba para encontrar la forma más sencilla de fallar.

Código de muestra del sitio 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
  )
}
2
user unknown

Si necesita esto para elegir un marco de prueba unitario, sugeriría lo siguiente:

Elija el que usa el resto de su equipo.

Si su equipo no usa uno, o no tiene un equipo, use el que su IDE admite de fábrica en la configuración predeterminada.

Si aún no lo ha decidido, comience con JUnit 4, que es el estándar de facto.

1
user1249

Con las versiones recientes de JUnit, Hamcrest se integró en la biblioteca. Hamcrest agrega comparadores adicionales que mejoran la legibilidad pero, por lo demás, no cambian la semántica de sus pruebas. Por lo tanto, podría ser una buena adición para su configuración de prueba.

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))));
0
BenR