¿Qué estructuras de prueba de unidad existen para Java?

7

He usado TestNG y JUnit. ¿Qué otros marcos están ahí fuera? ¿Qué los hace especiales y / o diferentes del resto?

    
pregunta codeyoung 24.09.2010 - 03:24

6 respuestas

12

Scala Specs obtiene mi voto! :-)

Specs es un marco de pruebas de desarrollo basado en el comportamiento escrito en Scala. Se puede utilizar para escribir pruebas para Java y Scala. Fue inspirado por RSpec - un marco de prueba muy popular en el mundo Ruby.

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? :-)

    
respondido por el missingfaktor 18.10.2010 - 19:15
6

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

    
respondido por el Sankar Ganesh 29.09.2010 - 10:56
2

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

Usted escribe Especificaciones, y el marco de trabajo construye los casos de prueba al azar para usted, y al violar un cheque intentará simplificar la prueba, para encontrar la manera más sencilla de fallar.

Código de ejemplo 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
  )
}
    
respondido por el user unknown 13.02.2011 - 03:04
2

Existe un nuevo mundo de pruebas de frameworks para Java a través de JRuby. Por ejemplo: Prueba :: Unidad, RSpec, Shoulda, ZenTest, Mock RSpec, Mocha y Pepino.

Creo que es genial escribir pruebas de Java en el elegante lenguaje Ruby. Por supuesto, esto depende de si tiene ganas de tener varios idiomas en su SCM.

    
respondido por el Chiron 01.01.2012 - 20:36
1

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

Elige el que usa el resto de tu equipo.

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

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

    
respondido por el user1249 01.01.2012 - 20:36
0

Con las versiones recientes de JUnit, Hamcrest se integró en la biblioteca. Hamcrest agrega matchers adicionales que mejoran la legibilidad pero que, 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))));
    
respondido por el BenR 01.01.2012 - 21:55

Lea otras preguntas en las etiquetas