Pruebas de Software: Junit
Departamento de Sistemas y
Computación
Facultad de Ingeniería
Universidad de los Andes
Qué es Junit?
Es un framework de pruebas para Java, utilizado para escribir y ejecutar pruebas repetibles.
Es una instancia de la arquitectura xUnit para frameworks de pruebas unitarias.
Es de código abierto, creado porErich Gamma –GoF, Kent Beck
Inicialmente utilizado para eXtreme
Características
Aserciones para probar resultar esperados
Formas para compartir información de pruebas
Suites de pruebas para organizar y ejecutar pruebas fácilmente
Programa que ejecuta las pruebas de
manera gráfica y textual
Objetivos
Ejecutar pruebas de manera automática
Evitar el problema de tener que ejecutar pruebas una por una, de manera manual con posibilidad de errores.
Sencillo
Proveer solamente la funcionalidad que requiere una persona para hacer pruebas
Se debe aprender poco para poder escribir una
prueba
Objetivos (cont.)
Crear pruebas que retienen su valor agregado a través del tiempo
Capacidad de repetir una prueba bajo las mismas condiciones
Si hago cambios sobre el software, lo demás debe mantenerse funcionando
Provee una forma de hacer pruebas de regresión
Se pueden agrupar conjuntos de pruebas de
distintas personas sin problemas, debido al
carácter uniforme que provee
Objetivos (cont.)
Crear pruebas para cada parte del software
La idea es crear las pruebas al comienzo del desarrollo y no después
Es como crear las pruebas a partir de las clases que no contienen implementación y a medida que se desarrolla software ir probando
Un cambio significa ejecutar las pruebas
anteriores y las nuevas
Conceptos Básicos
Cada clase de prueba contiene métodos para probar los métodos de una clase particular:
Cada método de prueba debe tener la
anotación@Test
Conceptos Básicos
BookLogic
BookDTO getBook(Long id)
BookDTO createBook(
BookDTO dto)
BookLogicTest
@Test
void createBookTest()
@Test
void getBookTest()
@Test
Public void createBookTest() {
…
BookDTO result = bookLogic.createBook(dto);
… }
bookLogic
Conceptos Básicos
BookLogic
BookDTO getBook(Long id)
BookDTO createBook(
BookDTO dto)
BookLogicTest
@Test
void createBookTest()
@Test
void getBookTest()
@Test
Public void createBookTest() {
…
BookDTO result = bookLogic.createBook(dto);
… }
bookLogic
@Inject
private IBookLogic bookLogic;
Conceptos Básicos
BookLogic
BookDTO getBook(Long id)
BookDTO createBook(
BookDTO dto)
BookLogicTest
@Test
void createBookTest()
@Test
void getBookTest()
@Test
Public void createBookTest() {
PodamFactory factory = new PodamFactoryImpl();
BookDTO dto = factory.manufacturePojo(BookDTO.class);
BookDTO result = bookLogic.createBook(dto);
…
bookLogic
@Inject
private IBookLogic bookLogic;
Se crea un objeto con datos
aleatorios
utilizando Podam
Conceptos Básicos
BookLogic
BookDTO getBook(Long id)
BookDTO createBook(
BookDTO dto)
BookLogicTest
@Test
void createBookTest()
@Test
void getBookTest()
@Test
Public void createBookTest() {
PodamFactory factory = new PodamFactoryImpl();
BookDTO dto = factory.manufacturePojo(BookDTO.class);
BookDTO result = bookLogic.createBook(dto);
Assert.assertNotNull(result);
BookEntity entity = em.find(BookEntity.class, result.getId());
Assert.assertEquals(dto.getName(), entity.getName());
Assert.assertEquals(dto.getIsbn(), entity.getIsbn());
bookLogic
@Inject
private IBookLogic bookLogic;
Se crea un objeto con datos
aleatorios
utilizando Podam
Se consulta la
BD utilizando un
manejador de
persistencia
Se compara lo
que se creó con
Conceptos Básicos
BookPersistence
BookEntity getBook(BookEntity e)
BookEntity createBook(BookEntity e)
BookPersistenceTest
@Test
void createBookTest()
@Test
void getBookTest()
@Test
public void createBookTest() {
PodamFactory factory = new PodamFactoryImpl();
BookEntity newEntity = BookConverter.basicDTO2Entity(
factory.manufacturePojo(BookDTO.class));
BookEntity result = bookPersistence.create(newEntity);
Assert.assertNotNull(result);
bookPersistence
@Inject
private BookPersistence bookPersistence;
Se crea un objeto con datos aleatorios utilizando Podam
Se consulta la BD
utilizando un
manejador de
persistencia
Fixtures (Ambientes de prueba)
@BeforeClass
@AfterClass
@Before
@After test1
@Before
@After testk
@Before
@After testn
…
…
Fixtures (Ambientes de prueba)
@BeforeClass
@Before
@After test1
@Before
@After testk
@Before
@After testn
…
…
@Inject
UserTransaction utx;
@Before
public void configTest() { try {
utx.begin();
clearData();
insertData();
utx.commit();
} catch (Exception e) { e.printStackTrace();
try {
utx.rollback();
} catch (Exception e1) {
e1.printStackTrace();
} } }
private void clearData() { em.createQuery("delete from
BookEntity").executeUpdate();
}
private void insertData() {
for (int i = 0; i < 3; i++) {
PodamFactory factory = new PodamFactoryImpl();
BookEntity entity =