Este documento describe la metodología de trabajo del equipo para la práctica 1 sobre la biblioteca Mockito. Se detallan los roles de cada miembro, las herramientas que se usarán (Redmine y SVN), y el proceso de desarrollo basado en Scrum. También se explican los requisitos funcionales y técnicos del proyecto.
Diapositivas Curso Java J2EE, módulo:
MODULO VI: APLICACIONES WEB CON JAKARTA STRUTS
- Introducción y arquitectura
• FrameWork
• Patrón MVC
• Instalación - Primer programa
• Control de flujo
• Diagrama Clases
• Atención de la petición
- Integración con la capa de datos
• Persistencia,
• JDBC
• Patrón DAO
• Hibernate
- Manejo de Formularios
• Form Beans
• Validación en formulario
- Validación de Formularios
• Framework Validator
• Validación JavaScript
- Tratamiento de Excepciones
• Excepciones Globales
- Internacionalización
- Composición de vistas
• Plantillas
• Tiles
- Biblioteca de etiquetas
• HTML
• BEAN
• LOGIC
Corporación de Industrias Tecnológicas S.A. - Capacitaciones en Informática - Programación con CodeIgniter
www.CorpintecSA.com
contacto@CorpintecSA.com
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006Samuel Marrero
Resumen de Tutorial o Curso de Java Struts (Framework para Java) impartido durante el curso 2005-2006, sobre los principios de este framework para Java.
Programación Funcional en Javascript. 27/10/2014. NodeJS Madrid
Video: http://bit.ly/1xTizFc
Code: http://bit.ly/1qmmR3Q
La programación funcional está cogiendo fuerte tracción en los últimos años dentro de la comunidad de desarrollo. Tal vez ello se deba al surgimiento de nuevas arquitecturas que demandan cotas de escalabilidad, resistencia y flexibilidad en el marco de soluciones centradas en procesos de transformación. Pero más allá de una simple moda, como trataremos de mostrar en esta charla, la programación funcional conduce a soluciones de código robustas, versátiles y expresivas que difícilmente son comparables con las propias de la orientación a objetos.
Además JavaScript, como la mayoría de los lenguajes de scripting es un lenguaje idiomático que invita a pensar en términos funcionales. De hecho muchas veces, cuando programamos en Javascript, desarrollamos soluciones funcionales casi sin darnos cuenta. Pero para trabajar correctamente en el marco de este paradigma debemos saber, qué es exactamente la programación funcional, cuáles son sus ventajas y principios fundacionales, de qué mecanismos se sirve, qué técnicas de programación se utilizan, qué patrones de diseño funcional existen a nuestra disposición y qué estilos arquitectónicos emergen.
En esta charla descubriremos cómo se construyen arquitecturas funcionales dirigidas por los datos, hablaremos de programación por capas basada en orden superior y presentaremos modelos de programación concomitantes como la programación reactiva basada en streams o las arquitecturas map/reduce propias de las técnicas de big data.
Diapositivas Curso Java J2EE, módulo:
MODULO VI: APLICACIONES WEB CON JAKARTA STRUTS
- Introducción y arquitectura
• FrameWork
• Patrón MVC
• Instalación - Primer programa
• Control de flujo
• Diagrama Clases
• Atención de la petición
- Integración con la capa de datos
• Persistencia,
• JDBC
• Patrón DAO
• Hibernate
- Manejo de Formularios
• Form Beans
• Validación en formulario
- Validación de Formularios
• Framework Validator
• Validación JavaScript
- Tratamiento de Excepciones
• Excepciones Globales
- Internacionalización
- Composición de vistas
• Plantillas
• Tiles
- Biblioteca de etiquetas
• HTML
• BEAN
• LOGIC
Corporación de Industrias Tecnológicas S.A. - Capacitaciones en Informática - Programación con CodeIgniter
www.CorpintecSA.com
contacto@CorpintecSA.com
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006Samuel Marrero
Resumen de Tutorial o Curso de Java Struts (Framework para Java) impartido durante el curso 2005-2006, sobre los principios de este framework para Java.
Programación Funcional en Javascript. 27/10/2014. NodeJS Madrid
Video: http://bit.ly/1xTizFc
Code: http://bit.ly/1qmmR3Q
La programación funcional está cogiendo fuerte tracción en los últimos años dentro de la comunidad de desarrollo. Tal vez ello se deba al surgimiento de nuevas arquitecturas que demandan cotas de escalabilidad, resistencia y flexibilidad en el marco de soluciones centradas en procesos de transformación. Pero más allá de una simple moda, como trataremos de mostrar en esta charla, la programación funcional conduce a soluciones de código robustas, versátiles y expresivas que difícilmente son comparables con las propias de la orientación a objetos.
Además JavaScript, como la mayoría de los lenguajes de scripting es un lenguaje idiomático que invita a pensar en términos funcionales. De hecho muchas veces, cuando programamos en Javascript, desarrollamos soluciones funcionales casi sin darnos cuenta. Pero para trabajar correctamente en el marco de este paradigma debemos saber, qué es exactamente la programación funcional, cuáles son sus ventajas y principios fundacionales, de qué mecanismos se sirve, qué técnicas de programación se utilizan, qué patrones de diseño funcional existen a nuestra disposición y qué estilos arquitectónicos emergen.
En esta charla descubriremos cómo se construyen arquitecturas funcionales dirigidas por los datos, hablaremos de programación por capas basada en orden superior y presentaremos modelos de programación concomitantes como la programación reactiva basada en streams o las arquitecturas map/reduce propias de las técnicas de big data.
Writing great unit tests distinguishes good programmers from great programmers. In this course, you will learn how to write great unit tests with Mockito and JUnit. You take 12 steps with JUnit and 18 steps with Mockito into unit testing proficiency.
Mockito
Step 01 : Set up an Eclipse Project with JUnit and Mockito frameworks. First Green Bar.
Step 02 : Example to start understanding why we need mocks.
Step 03 : What is a stub? Create an unit test using Stub? Disadvantages of Stubs.
Step 04 : Your first Mockito code! Hurrah!!! Lets use Mockito to mock TodoService.
Step 05 : Stubbing variations with Mockito. A few mockito examples mocking List class : Multiple return values, Argument Matchers and throwing exceptions.
Step 06 : Introduction to BDD. Given When Then. BDD Mockito Syntax.
Step 07 : How to verify calls on a mock? Verify how many times a method is called. We will add deleteTodo method to the TodoService.
Step 08 : How to capture an argument which is passed to a mock?
Step 09 : Hamcrest Matchers.
Step 10 : Let's simplify things with Mockito Annotations. @Mock, @InjectMocks, @RunWith(MockitoJUnitRunner.class), @Captor
Step 11 : JUnit Rules. Using MockitoJUnit.rule() instead of @RunWith(MockitoJUnitRunner.class).
Step 12 : Real world Example with Spring
Step 13 : What is a spy? How to spy with Mockito?
Step 14 : Some Theory : Why does Mockito not allow stubbing final and private methods?
Step 15 : Using PowerMock and Mockito to mock a Static Method.
Step 16 : Using PowerMock and Mockito to invoke a private Method.
Step 17 : Using PowerMock and Mockito to mock a constructor.
Step 18 : Good Unit Tests.
JUnit
Step 01 : Need for Unit Testing
Step 02 : Setting up your First JUnit
Step 03 : First Successful JUnit. Green Bar and assertEquals
Step 04 : Refactoring Your First JUnit Test
Step 05 : Second JUnit Example assertTrue and assertFalse
Step 06 : @Before @After
Step 07 : @BeforeClass @AfterClass
Step 08 : Comparing Arrays in JUnit Tests
Step 09 : Testing Exceptions in JUnit Tests
Step 10 : Testing Performance in JUnit Tests
Step 11 : Parameterized Tests
Step 12 : Organize JUnits into Suites
Desarrollo de software basado en componentes. Reutilización del software. Beneficios
Concepto de componente: Características
Propiedades y atributos:
Persistencia del componente
Extender la apariencia y el comportamiento de los controles en modo de diseño.
Integrar controles existentes en nuestros componentes.
Herramientas para el desarrollo.
Empaquetado de componentes
Framework ORM para PHP, su objetivo es contribuir en el Modelo de la Lógica de negocio y facilitar la creación de Class y la persistencia de los Datos,
Instrucciones del procedimiento para la oferta y la gestión conjunta del proceso de admisión a los centros públicos de primer ciclo de educación infantil de Pamplona para el curso 2024-2025.
Un libro sin recetas, para la maestra y el maestro Fase 3.pdfsandradianelly
Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestra y el maestro Fase 3Un libro sin recetas, para la maestr
1. Practica 1Practica 1
Biblioteca MockitoBiblioteca Mockito
UNED 2016UNED 2016
EquipoEquipo
Alberto GómezAlberto Gómez
Ignacio CerezoIgnacio Cerezo
Federico GrazianoFederico Graziano
Ismael MartínIsmael Martín
Carlos LarrondoCarlos Larrondo
Carlos AlmarchaCarlos Almarcha
José BarbaJosé Barba
DocenteDocente
Carlos Luis SánchezCarlos Luis Sánchez
2. Gestión, requisitos y objetivosGestión, requisitos y objetivos
Análisis:
Punto de partida: De qué partimos?
Especificacion de requisitos: Definición exhaustiva del QUÉ
Metodología de trabajo:
Roles: Quién es quién?
Herramientas utilizadas:
Redmine -> Coordinación y gestión de tareas
SVN -> gestión de código fuente.
Reparto de Tareas
Detalle tecnico
Requisitos Globales: Afectan a toda la aplicación.
Requisitos asociados a Libros
Requisitos asociados a Socios
Requisitos asociados a Préstamos
3. AnálisisAnálisis
De dónde partimos?
http://62.204.199.127/JAVA_UNED/bea/browser/biblioteca_Mockito
revision 131
Requisitos
Globales:
[GBL-1]Soporte para conexion a Oracle
[GBL-2]Creación de menú CRUD en menú popup contextual
[GBL-3]Internacionalización de la aplicación
[GBL-4]Cierre ordenado de la aplicación
[GBL-5]Pruebas unitarias
[GBL-6]Creación de un HOW TO JUnit/Mockito
[GBL-7]Presentacion SlideShare
Socios
[SCS-1]Inclusión de una ficha para la modificación de SOCIOS
Prestamos
[PRT-1]Inclusión de una ficha para la inserción de PRESTAMOS
[PRT-2]Inclusión de una ficha para la modificación de PRESTAMOS
[PRT-3]Socios y libros ORDENADOS en combos
Libros
[LBR-1]Inclusión de una ficha para la inserción de PRESTAMOS
[LBR-2]Inclusión de una ficha para la modificación de PRESTAMOS
4. Metodología de trabajoMetodología de trabajo
Roles
Equipo
Carlos Almarcha - en adelante 'calmarcha‘
Carlos Larrondo - en adelante 'clarrondo‘
Federico Graziano - en adelante 'fgraziano‘
Ismael Martín - en adelante 'imartin‘
Ignacio Cerezo - en adelante 'icerezo‘
Responsable Producto
Carlos Luis Sánchez
Scrum Master
José Barba - en adelante 'jbarba‘
Herramientas
Redmain en www.hostedredmine.org para Coordinacion y
asignación de tareas
SVN para gestion de código fuente.
5. Metodología de trabajoMetodología de trabajo-Detalle-Detalle
Uso Redmine
Cada práctica un proyecto en RedMine.
Cada práctica tiene tareas, representadas como 'Issues‘
Cada tarea tiene un resposable asignado
Las tareas las asigna el SM.
Distribucion de tiempo efectivo del equipo
Lunes: Reunion con Responsable producto
Martes-Miercoles: Determinación y asignación de tareas
Miercoles: Reunion SM<->Equipo para aclarar dudas sobre tareas
asignadas
Jueves-Domingo: Tiempo efectivo de trabajo para el equipo
Reuniones
Lunes: Resp producto
Miercoles: SM y Equipo
En cualquier momento:A demanda del equipo.
6. Metodología de trabajo - Uso de SVNMetodología de trabajo - Uso de SVN
Repositorio SVN sobre ArchLinux versión 1.9.0-1
Estructura establecida:
<root>/practica1-BibliotecaGUI
|- branches
|- agomez
|- calmarcha
|- clarrondo
|- fgraziano
|- icerezo
|- imartin
|- jbarba
|- dist
|- trunk
branches:
ramas de desarrollo, una por miembro
cada tarea sera una copia del trunk en el branch del responsable
dist
espacio para entregas a jefe de producto
Trunk
codigo fuente para la práctica
7. Metodología de trabajo - Uso de SVNMetodología de trabajo - Uso de SVN
Ciclo de vida de una tarea sobre repositorio
Se crea tarea en RedMine, con responsable
Se crea rama desde 'trunk' contra
'branches/<responsable>/<id_tarea>‘
La rama creada evoluciona, y la tarea se resuelve
Se realiza 'merge' de la rama contra trunk
Beneficios
Premite paralalelizacion de tareas
Cada tarea tiene su espacio privado de trabajo
Perjuicios
El SM debe coordinar los cambios y hacer los 'merge's contra el trunk
CUIDADO CON PERDER CAMBIOS ENTRE VERSIONES!
8. Acceso a BBDD OracleAcceso a BBDD Oracle
Especificación de requisito
Posibilitar la conexión de la aplicación a bases de datos Oracle.
Revisión y modificación de clases con acceso a datos.
Estrategia de solución usada
Modificación de la lógica de conexión para permitir el uso de BD
Oracle. Esto se podrá realizar mediante parametrización.
PROBLEMA: El modo de generación de identificadores es diferente
en MySql (autogenerado) y Oracle (uso de objetos SECUENCIA).
SOLUCION:
Modificación de clases que implementan DAO, mediante
extensión de las existentes, permitiendo de esta manera la
inserción de registros.
Creación de un método estático que obtenga el valor de una
secuencia.
9. Modificaciones realizadas sobre elModificaciones realizadas sobre el
código existente (I)código existente (I)
Clase ConnectionManager (MODIFICACIÓN)
Selección de método de conexión mediante paramento en
fichero de configuración.
Ahora se permite MySQL u Oracle (SID o Service Name).
Clase CustomersManagementController (MODIFICACIÓN)
Instanciación de ICustomersDAO dependiendo del tipo
de conexión.
Clase BooksManagementController (MODIFICACIÓN)
Instanciación de IBooksDAO dependiendo del tipo de
conexión.
10. Modificaciones realizadas sobre elModificaciones realizadas sobre el
código existente (II)código existente (II)
Clase CustomersDAOImplOracle (CREACIÓN)
Sobre escritura del método insert para asignar el
identificador del socio mediante consulta del valor de una
secuencia.
Clase BooksDAOImplOracle (CREACIÓN)
Sobre escritura del método insert para asignar el
identificador del libro mediante consulta del valor de una
secuencia.
Clase UtilsOracle (CREACIÓN)
Incluye un método estático que devuelve el valor
(NEXTVAL) de una secuencia, a partir del nombre de la
misma.
11. Menú CRUD contextualMenú CRUD contextual
Especificación de requisito
Inclusión de un menú contextual para la realización de la
operaciones CRUD en el componente socios. Éstas serán:
Añadir
Editar
Eliminar
Estrategia de solución usada
Reutilización del código del controlador, realizando las
llamadas de la misma manera que lo hacen los elementos
de la botonera.
Creación de los elementos necesarios y asociación con los
métodos anteriormente comentados
12. Modificaciones realizadas sobre elModificaciones realizadas sobre el
código existentecódigo existente
Clase CustomerManagementView (MODIFICACIÓN)
Creación de elemento JPopMenu.
Creación de ítems que conforman el menú.
Asociación de listeners a estos ítems.
Clase CustomerManagementController (MODIFICACIÓN)
Modificación de método de gestión de listeners
13. Aspecto del menú contextual trasAspecto del menú contextual tras
implementación del cambioimplementación del cambio
14. Requisitos asociados a LibrosRequisitos asociados a Libros
Objetivo
Adecuar el proyecto Biblioteca-Mockito al MVC. En la
parte de libros se pide asemejar toda la funcionalidad en
una sola ficha respetando el modelo MVC.
Resultado
Para cumplir el objetivo, previamente se ha procedido a
entender la funcionalidad existente, hemos adquirido el
conocimiento de MVC para adecuar la practica a la
funcionalidad requerida.
Una vez adquirida los conocimientos hemos eliminado el
paquete “es.csc.biblioteca.books.gui” la vista y el
controlador de la parte Detalle asumiendo dicha
funcionalidad en la pantalla principal.
15. Lógica ModificadaLógica Modificada
Eliminación de Clases
BookDetailsController.java.
BookDetailsView.java.
Modificación de Clases
BooksManagementController. Adquiere la funcionalidad
de la clase eliminada BookDetailsController.java
actionPerformed
getBook
checkMandatoryFields
doClose
BooksManagementView. Adquieres la funcionalidad/métodos de
la clase eliminada BookDetailsView.java
SetOkListener SetBook getBook hideWarnin
SetCancelListener showWarningTitle showWarningTopic setEstado
16. Dificultades EncontradasDificultades Encontradas
Dificultades a nivel conceptual
Funcionamiento del setLayout
Funcionamiento de biblioteca Mockito para pruebas
integradas.
Otras dificultades
Problemas al cargar los datos del detalle cuando teníamos
seleccionado un libro en el multiregistro.
17. FUNCIONALIDADES PRESTAMOSFUNCIONALIDADES PRESTAMOS
BIBLIOTECA MOCKITOBIBLIOTECA MOCKITO
ESQUEMA BASE
REQUISITO. Detalle el requisito (objetivo a cumplir).
DESARROLLO. Breve descripción del desarrollo.
RESOLUCIÓN. Problemas encontrados y su resolución.
18. MODELO MVC PRESTAMOS
REQUISITO: Mantener modelo MVC de desarrollo de la aplicación del que se parte
previamente: Biblioteca_mockito.
DESARROLLO. La mayor parte del desarrollo previo es válida. La separación impuesta
por el patrón MVC está claramente definida. En la parte de Préstamos no estaba
desarrollada la ventana externa a eliminar pero si que necesitábamos incorporar
código para cubrir funcionalidad.
RESOLUCIÓN. Las clases que eran suceptibles de modificar eran las clases del
paquete es.csc.biblioteca.loans.gui: LoansManagementView y
LoansManagementController y las clases para manejar los modelos
CustomersDAOImpl y BooksDAOImpl.
Decidimos modificar exclusivamente las clases del paquete es.csc.biblioteca.loans.gui
para no interferir en el trabajo de los demás. La consecuencia será que tendremos un
par de métodos en la clase controladora "LoansManagementController" que bien
podrían estar en las clases de los paquetes de modelo.
19. ACCESO AL MODELO COMPLETO DE LAACCESO AL MODELO COMPLETO DE LA
APLICACIÓNAPLICACIÓN
REQUISITO: Necesidad de acceso al modelo completo de la aplicación para poder
cumplir con los requisitos funcionales y de desarrollo.
DESARROLLO. La funcionalidad de Préstamos, a diferencia de la funcionalidad de
Socios o de Libros, necesita el acceso completo al modelo. No solo se necesita
acceder al modelo de Préstamos, sino también al modelo de Socios y Libros puesto
que se debe mostrar al usuario información sobre estos modelos a través de los
componentes JComboBox.
RESOLUCIÓN.Para acceder al modelo de préstamos inicialmente se importaron las
clases:
import es.csc.biblioteca.loans.dao.ILoansDAO;
import es.csc.biblioteca.loans.dao.LoansDAOException;
import es.csc.biblioteca.loans.dao.LoansDAOImpl;
Para acceder al resto de modelos se incluyó las siguientes importaciones:
import es.csc.biblioteca.customers.dao.*;
import es.csc.biblioteca.books.dao.*;
import es.csc.biblioteca.loans.dao.LoanDTO;
20. ELIMINACIÓNVENTANA EXTERNA POR FICHA
INTERNA
REQUISITO: Eliminar ventana externa de administración de prestamos. Codigo previo del que se parte
en Biblioteca_mockito.
DESARROLLO. Incorporación de 8 elementos visuales swing dentro de la ventana de Préstamos
objeto de la clase LoansManagemenView. Conformación de la botonera:Añadir, Editar y Eliminar.
Aceptar y Cancelar. Nuevas funcionalidades implementada en LoansManagementController.
RESOLUCIÓN. Se mantiene el modelo MVC. Mientras la ventana de Préstamos esté abierta se
mantendrá la conexión con los modelos. Esto se realizó dentro de la clase controladora ampliando
atributos y modificando su método constructor.
21. CONTROL DE LA FUNCIONALIDAD DESDE LACONTROL DE LA FUNCIONALIDAD DESDE LA
BOTONERABOTONERA
REQUISITO: Solo botón "Eliminar" funciona. Seleccionando sobre la tabla de
Préstamos aquellos a ser borrado de base de datos. El resto de botones están velados
puesto que no tienen funcionalidad. Habilitar.
DESARROLLO. Del resto de botones daremos funcionalidad a "Añadir" y "Editar".
Para ello generaremos sus eventos en la clase "LoansManagementView" y
atendiendolos desde la clase "LoansManagementController".
RESOLUCIÓN. Necesitamos dos nuevos botones para un correcto manejo de la
funcionalidad: "Aceptar" y "Cancelar".
Para conocer si al Aceptar se debe añadir o corregir la edición de un préstamo,
utilizaremos una variable de control "ultimaaccion". Esto se hará en la clase de
Control de Préstamos LoansManagementController.
22. CONTROL DE ERRORES DE ESCRITURA ENCONTROL DE ERRORES DE ESCRITURA EN
LOS COMPONENTES DE LA FICHALOS COMPONENTES DE LA FICHA
REQUISITO: La aplicación no debe aceptar que el usuario introduzca valores en
blanco. Los errores que pueden producirse a priori son:
El usuario introduce fechas en blanco.
El usuario edita sin seleccionar ninguna columna.
DESARROLLO. Para cumplir con este requisito generaremos métodos en la clase
vista "LoansManagementView" que comprueben que el valor de los componentes es
correcto y que hay alguna fila seleccionada de la tabla.
Estos métodos serán llamados desde la clase "LoansManagementController" para
utilizarlos en la lógica de control de la actualización de Préstamos.
RESOLUCIÓN.
Error: Ordenación alfabética de los combos. Sol: incorporar el método estático
Collections.sort().
Error: Fechas de la ficha en blanco. Sol: métodos: public boolean isFechaValida()--
>(fecha inicio y fecha fin), public boolean isSelectedRow()-->seleccione un registro de
tipo prestamo.
23. POPUP PRESTAMOS BOTON DERECHOPOPUP PRESTAMOS BOTON DERECHO
DEL MOUSEDEL MOUSE
REQUISITO. Basándonos en el desarrollo previo de esta funcionalidad sobre clientes
(Costumers) e indicando el código modificado por nuestro Scrum Máster
implementar estas modificaciones adecuándolas a las clases y métodos definidas en
Loans.
DESARROLLO. Clases modificadas:
LoansManagementController.java
LoansManagementView..java
LoansManagementView..form
RESOLUCIÓN. La dificultad surgió a la hora de editar el codigo “protegido” de la
clase LoansManagementView.java y más concretamente en el método private void
initComponents(). No se encontró la fórmula que dispone Netbeans para poder
modificar ese código que genera automáticamente el IDE al diseñar el formulario.
Para poder editarlo se utilizó otro entorno de progración; en nuestro caso
DreamWeaver. Se modificó y tras volver abrir el fichero desde Netbeans, se confirma
que este código vuelve a ser “protegido” y no permite su edición desde este IDE.
24. GENERACIÓN DE PRUEBAS UNITARIASGENERACIÓN DE PRUEBAS UNITARIAS
PRESTAMOSPRESTAMOS
REQUISITO. Para las pruebas unitarias nos basamos en replicar las clases generadas para
las otras funcionalides de Socios y Libros. Se generó una clase para probar métodos de la
clase modelo "LoansDAOTest" y otra clase para probar la vista "LoansTableModel".
DESARROLLO. Las pruebas se soportan sobre las librerías JUnit y Mockito. Las pruebas
sobre la clase vista "LoansTableModel" se realizan con Mockito para evitar utilizar el
repositorio original del desarrollo que es MySQL. Mediante la librería hsqldb se genera una
base de datos en memoria simulando el entorno de Producción.
RESOLUCIÓN. La dificultad surgió a la hora adecuar el método testUpdate() de la clase
"LoansDAOTest". Estas pruebas unitarias se basan en Junit.
Error en la sentecia: LoanDTO expResult = instance.findByPrimaryKey(idPrestamo);
Detalle error: Detalle:PrestamoDTO{idPrestamo=13, idSocio=CustomerDTO{idSocio=1, dni=null,
nombre=Fernandez Najera, apellidos=Luis adfd , direccion=null, fechaAlta=null},
idLibro=LibroDTO{idLibro=1, nombre=Informatica sdaf, autor=null, tema=null}, fechaInicio=2000-01-01,
fechaFin=2015-11-21}
Sol: por determinar.
25. ERRORES DETECTADOS SCRUM MASTERERRORES DETECTADOS SCRUM MASTER
ERROR: Edición de prestamo sin fecha fin.
DETALLE DEL ERROR. Consola:
run:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at
es.csc.biblioteca.loans.gui.LoansManagementView.setEditFicha(LoansManagementView.java:461)
At
es.csc.biblioteca.loans.gui.LoansManagementController.editLoan(LoansManagementController.jav
a:227) etc...
SOLUCIÓN. No se considera q la fecha fin puede ser nula,está en este método:
public void setEditFicha(){
java.sql.Date fecha = (java.sql.Date)this.tblLoans.getValueAt(this.tblLoans.getSelectedRow(),4);
long longfecha = fecha.getTime();
setFechaInicio(new Date(longfecha));
fecha = (java.sql.Date)this.tblLoans.getValueAt(this.tblLoans.getSelectedRow(),5);
longfecha = fecha.getTime(); <-- AQUI ESTA EL ERROR
SOL: java.sql.Date fechaFin=(fecha == null ? fecha : new java.sql.Date(fecha.getTime()) );
setFechaFin(new Date(longfecha));
}