Sin título de diapositiva - Universidad de los Andes

Anuncio
Pruebas de Software: Junit
Departamento de Sistemas y
Computación
Facultad de Ingeniería
Universidad de los Andes
1
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
Programming
2
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
3
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
4
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
5
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
6
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
7
Conceptos Básicos
BookLogicTest
BookLogic
bookLogic
BookDTO getBook(Long id)
@Test
void getBookTest()
BookDTO createBook(
BookDTO dto)
@Test
void createBookTest()
@Test
Public void createBookTest() {
…
BookDTO result = bookLogic.createBook(dto);
…
}
8
Conceptos Básicos
BookLogicTest
BookLogic
bookLogic
BookDTO getBook(Long id)
@Test
void getBookTest()
BookDTO createBook(
BookDTO dto)
@Test
void createBookTest()
@Inject
private IBookLogic bookLogic;
@Test
Public void createBookTest() {
…
BookDTO result = bookLogic.createBook(dto);
…
}
9
Conceptos Básicos
BookLogicTest
BookLogic
bookLogic
BookDTO getBook(Long id)
@Test
void getBookTest()
BookDTO createBook(
BookDTO dto)
@Test
void createBookTest()
Se crea un objeto
con datos
aleatorios
utilizando Podam
@Inject
private IBookLogic bookLogic;
@Test
Public void createBookTest() {
PodamFactory factory = new PodamFactoryImpl();
BookDTO dto = factory.manufacturePojo(BookDTO.class);
BookDTO result = bookLogic.createBook(dto);
…
}
10
Conceptos Básicos
BookLogicTest
BookLogic
bookLogic
BookDTO getBook(Long id)
@Test
void getBookTest()
BookDTO createBook(
BookDTO dto)
@Test
void createBookTest()
Se crea un objeto
con datos
aleatorios
utilizando Podam
Se consulta la
BD utilizando un
manejador de
persistencia
@Inject
private IBookLogic bookLogic;
@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());
Se compara lo
que se creó con
lo que se obtuvo
Assert.assertEquals(dto.getName(), entity.getName());
Assert.assertEquals(dto.getIsbn(), entity.getIsbn());
Assert.assertEquals(dto.getImage(), entity.getImage());
11
Assert.assertEquals(dto.getDescription(), entity.getDescription());
}
Conceptos Básicos
@Inject
private BookPersistence bookPersistence;
BookPersistenceTest
BookPersistence
bookPersistence
BookEntity getBook(BookEntity e)
BookEntity createBook(BookEntity e)
Se crea un objeto
con datos aleatorios
utilizando Podam
@Test
void getBookTest()
@Test
void createBookTest()
@Test
public void createBookTest() {
PodamFactory factory = new PodamFactoryImpl();
BookEntity newEntity = BookConverter.basicDTO2Entity(
factory.manufacturePojo(BookDTO.class));
Se consulta la BD
utilizando un
manejador de
persistencia
BookEntity result = bookPersistence.create(newEntity);
Assert.assertNotNull(result);
BookEntity entity = em.find(BookEntity.class, result.getId());
Se compara lo que
se creó con lo que
se obtuvo
}
Assert.assertEquals(newEntity.getName(), entity.getName());
Assert.assertEquals(newEntity.getIsbn(), entity.getIsbn());
Assert.assertEquals(newEntity.getImage(), entity.getImage());
Assert.assertEquals(newEntity.getDescription(), entity.getDescription());
12
Fixtures (Ambientes de prueba)
@BeforeClass
@Before
test1
@After
…
@Before
testk
@After
…
@Before
testn
@After
@AfterClass
13
Fixtures (Ambientes de prueba)
@Inject
UserTransaction utx;
@BeforeClass
@Before
test1
@After
…
@Before
testk
@After
…
@Before
testn
@After
@AfterClass
@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 =
BookConverter.basicDTO2Entity(factory.manufacturePojo(
BookDTO.class));
em.persist(entity);
data.add(entity);
}
}
14
Descargar