Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto...

21
Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz

Transcript of Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto...

Page 1: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Projeto Maven AcademicNet Grupo DGMR

Daniel Isidoro BornGuilherme Amaral

Márcio PercilioRoberto Rutz

Page 2: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Implementações

• Logging• Script do banco de dados• Arquivo de propriedades com Spring DI• Testes Junit• Teste DBUnit• Teste Selenium• Spring MVC

Page 3: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

LoggingArquivo de propriedades: log4j.properties#define o nível do logger raiz e o nome de seu appender (htmlAppender)log4j.rootLogger=INFO, htmlAppender

# define a classe do appenderlog4j.appender.htmlAppender=org.apache.log4j.RollingFileAppender

#nome do arquivo de loglog4j.appender.htmlAppender.File=logging/HTMLLayout.html

# define a classe para formação (layout)log4j.appender.htmlAppender.layout=org.apache.log4j.HTMLLayout

# define que deve ser registrada informação de contextolog4j.appender.htmlAppender.layout.LocationInfo=true

# título do arquivo de loglog4j.appender.htmlAppender.layout.Title=Log gerado pelo Log4j

Page 4: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

LoggingEx: Arquivo MensalidadeInserir.javapackage br.com.senac.academicnet.commands;...import br.com.senac.academicnet.business.Mensalidade;import br.com.senac.academicnet.dao.FacadeDAO;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;

public class MensalidadeInserir extends AbstractCommand {

Logger logger = Logger.getLogger(MensalidadeInserir.class.getName());

@Overridepublic void processarComando(HttpServletRequest request, HttpServletResponse response, HttpServlet

servlet) {

PropertyConfigurator.configure("log4j.properties");logger.info("Obtendo parâmetros de entrada.");

int idAluno = Integer.parseInt(request.getParameter("idAluno"));String dataParcela = request.getParameter("dataParcela");String dataPagamento = request.getParameter("dataPagamento");double valor = Double.parseDouble(request.getParameter("valor"));...

}...}

Page 5: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

LoggingEx: Arquivo de saída: HTMLLayout.html

Page 6: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Script do banco de dadosEx: Arquivo AcademicNetDB.sql---- PostgreSQL database dump--

-- Started on 2009-08-04 20:34:10

SET client_encoding = 'SQL_ASCII';SET standard_conforming_strings = off;SET check_function_bodies = false;SET client_min_messages = warning;SET escape_string_warning = off;...CREATE TABLE mensalidade ( id integer NOT NULL, data_parcela date NOT NULL, data_pagto date NOT NULL, valor numeric(10,2) NOT NULL, id_aluno integer);...ALTER TABLE public.mensalidade OWNER TO postgres;...REVOKE ALL ON SCHEMA public FROM PUBLIC;REVOKE ALL ON SCHEMA public FROM postgres;GRANT ALL ON SCHEMA public TO postgres;GRANT ALL ON SCHEMA public TO PUBLIC;

-- Completed on 2009-08-04 20:34:11

---- PostgreSQL database dump complete--

Page 7: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Arquivo de propriedades com Spring DIEx. applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">...<bean id="mensalidadeDao" class="br.com.senac.academicnet.dao.MensalidadeDAO">

<constructor-arg ref="dbConexao" /></bean>

...<bean id="dbConexao" class="br.com.senac.academicnet.util.DBConexao">

<constructor-arg ref="dbConfig" /></bean>...<bean id="dbConfig“

class="br.com.senac.academicnet.util.DBConfig"><property name="configuracao">

<props><prop key="banco.driver">org.postgresql.Driver</prop><prop

key="banco.servidor">jdbc:postgresql://localhost/academicNetDB</prop><prop key="banco.porta">5432</prop><prop key="banco.usuario">postgres</prop><prop key="banco.senha">postpost</prop>

</props></property>

</bean></beans>

Page 8: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Testes JUnitEx: Arquivo TestMensalidade.javapackage br.com.senac.academicnet.junit;import br.com.senac.academicnet.business.*;import org.junit.Before;import org.junit.Test;import static org.junit.Assert.*;

public class TestMensalidade {

Mensalidade m = new Mensalidade();

@Beforepublic void setUp(){

m.setDataPagamento("10/10/2009");m.setDataParcela("20/10/2009");m.setValor(-1);

}

@Testpublic void testDataPagamento(){

assertFalse("Data de Pagamento da mensalidade deve ser igual ou maior que data da parcela.", m.dataPagamentoOK() );

}

@Testpublic void testValor(){

assertFalse("Valor da mensalidade deve ser igual ou maior que zero.", m.valorOK() );}

}

Page 9: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Testes JUnitEx: Arquivo TestAtribuicao.javapackage br.com.senac.academicnet.junit;

import org.junit.Before;import org.junit.Test;import static org.junit.Assert.*;

import br.com.senac.academicnet.business.Atribuicao;

public class TestAtribuicao {Atribuicao a = new Atribuicao();

@Beforepublic void setUp() {

a.setUserid("abc");a.setNome("joaquim");

}

@Testpublic void testUserId() {

assertNotNull("Userid deve ser não null.", a.getUserid());assertTrue("Userid deve conter algum caractere.", a.getUserid().length() > 0);

}

@Testpublic void testNome() {assertNotNull("Nome deve ser não null.", a.getNome());assertTrue("Nome deve conter algum caractere.", a.getNome().length() > 0);

}}

Page 10: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Testes JUnitEx: Arquivo TestFrequencia.javapackage br.com.senac.academicnet.junit;

import org.junit.Before;import org.junit.Test;import static org.junit.Assert.*;import br.com.senac.academicnet.business.Frequencia;

public class TestFrequencia {

Frequencia frq = new Frequencia();

@Beforepublic void setUp() {

frq.setData("26/10/2009");frq.setId_aluno(1);frq.setId_turma(1);

}

@Testpublic void testData() {

assertNotNull("Data nao pode ser nula.", frq.getData());assertTrue("Data deve ser preenchida.", frq.getData().length() > 0);

}

@Testpublic void testAluno() {

assertNotNull("Aluno nao pode ser nulo.", frq.getId_aluno());assertTrue("Aluno deve ser preenchido.", frq.getId_aluno() > 0);

}

@Testpublic void testTurma() {

assertNotNull("Turma nao pode ser nula.", frq.getId_turma());assertTrue("Turma deve ser preenchida.", frq.getId_turma() > 0);

}}

Page 11: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Testes JUnitEx: Arquivo TestInscricao.javapackage br.com.senac.academicnet.junit;

import static org.junit.Assert.*;import org.junit.After;import org.junit.Before;import org.junit.Test;import br.com.senac.academicnet.business.Congresso;import br.com.senac.academicnet.business.Inscricao;

public class TestInscricao {

Inscricao inscricao;Congresso congresso;

@Beforepublic void setUp() throws Exception{

inscricao = new Inscricao();congresso = new Congresso();inscricao.setData("10/01/2000");inscricao.setCusto(200);congresso.setNome("Informática");congresso.setData("11/01/2000");

}

@Testpublic void testDataInscricao(){

assertTrue("A data da inscrição deve ser efetuada antes ou até a data do congresso.", inscricao.Confirmacao(congresso.getData()) );}

@Testpublic void testCustoInscricao(){

assertTrue("O custo da inscrição deve ser maior que zero.", inscricao.CustoInscricao() );}

@Afterpublic void tearDown() throws Exception

{inscricao = null;congresso = null;

}}

Page 12: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Testes JUnitEx: Arquivo TestUsuario.javapackage br.com.senac.academicnet.junit;

import org.junit.Before;import org.junit.Test;import static org.junit.Assert.*;

import br.com.senac.academicnet.business.Usuario;

public class TestUsuario {Usuario u = new Usuario();

@Beforepublic void setUp() {

u.setUserid("abc");u.setSenha("123456");

}

@Testpublic void testUserId() {

assertNotNull("Userid deve ser não null.", u.getUserid());assertTrue("Userid deve conter algum caractere.", u.getUserid().length() > 0);

}

@Testpublic void testSenha() {

assertNotNull("Senha deve ser não null.", u.getSenha());assertTrue("Senha deve conter algum caractere.", u.getSenha().length() > 0);

}}

Page 13: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Teste DBUnitEx: Arquivo TestUsuarioDAO.javapackage br.com.senac.academicnet.dbunit;import static org.junit.Assert.*;import java.io.FileInputStream;import java.io.IOException;import java.util.Properties;import org.junit.Before;import org.junit.Test;import br.com.senac.academicnet.business.Usuario;import br.com.senac.academicnet.dao.UsuarioDAO;import br.com.senac.academicnet.util.DBConexao;import br.com.senac.academicnet.util.DBConfig;

public class TestUsuarioDAO {UsuarioDAO usuarioDAO = null;

@Beforepublic void setUp() throws Exception {

Properties properties = new Properties();try {

properties.load(new FileInputStream("./dbconfig.properties"));} catch (IOException e) {

System.out.println("Arquivo dbconfig.properties não encontrado.");e.printStackTrace();System.exit(1);

}

DBConfig dbConfig = new DBConfig();dbConfig.setConfiguracao(properties);DBConexao db = DBConexao.getInstance(dbConfig);usuarioDAO = DAOTstFactory.getUsuarioDAO(db);

}

Page 14: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Teste DBUnitEx: Arquivo TestUsuarioDAO.java (Cont.)

@Testpublic void testIncluirUsuario() throws Exception {

Usuario u = new Usuario();u.setUserid("abcde");u.setSenha("123456");u.setPerfil("Aluno");String msg = usuarioDAO.adicionarUsuario(u);assertTrue(msg.contains("Usuário cadastrado com sucesso"));

}

@Testpublic void testAlterarUsuario() throws Exception {

Usuario u = usuarioDAO.leUsuarioPorUserid("abcde");u.setSenha("xyz123");String msg = usuarioDAO.atualizaUsuario(u);assertNull(msg);

}

@Testpublic void testExcluirUsuario() throws Exception {

Usuario u = usuarioDAO.leUsuarioPorUserid("abcde");String msg = usuarioDAO.removerUsuario(u.getId());assertNull(msg);

}}

Page 15: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Teste SeleniumEx: Arquivo TestUsuarioDAO.javapackage br.com.senac.academicnet.selenium;import static org.junit.Assert.assertFalse;import static org.junit.Assert.assertTrue;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;import org.openqa.selenium.server.SeleniumServer;import com.thoughtworks.selenium.DefaultSelenium;import com.thoughtworks.selenium.Selenium;

public class MensalidadeTest {private static final String MAX_WAIT_TIME_IN_MS = "60000";private Selenium selenium = new DefaultSelenium("localhost", 4444,"*iexplore" , baseUrl());private static SeleniumServer seleniumServer;

@BeforeClasspublic static void setUpClass() throws Exception {

seleniumServer = new SeleniumServer();seleniumServer.start();

}

@Beforepublic void setUp() throws Exception {

selenium.start();selenium.windowMaximize();

}

@Afterpublic void tearDown() throws Exception {

selenium.stop();}

@AfterClasspublic static void tearDownClass() throws Exception {

seleniumServer.stop();}

Page 16: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Teste SeleniumEx: Arquivo TestUsuarioDAO.java (cont.)

@Testpublic void testIncluirMensalidade() {

selenium.open(baseUrl());login();selenium.click("link=Adicionar");selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);// Selecionar Alunoselenium.select("idAluno", "2-Maria");// Informar dados da mensalidadeselenium.type("dataParcela", "01/10/2009");selenium.type("dataPagamento", "01/10/2009");selenium.type("valor", "200.0");// Inserir mensalidadeselenium.click("btnInserir");selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);assertTrue(selenium.isTextPresent("Mensalidade Cadastrada com Sucesso"));

} @Test public void testAlterarMensalidade() {

selenium.open(baseUrl());login();selenium.click("link=Consultar");// Selecionar Alunoselenium.select("idAluno", "2-Maria");selenium.click("btnSelecionar");selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);assertFalse(selenium.isTextPresent(" Não existe mensalidade para o aluno selecionado"));selenium.click("link=Alterar");selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);// Informar novos dados da mensalidadeselenium.type("dataPagamento", "01/11/2009");selenium.type("valor", "300.0");// Alterar mensalidadeselenium.click("btnAlterar");selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);assertTrue(selenium.isTextPresent("2-Maria"));assertTrue(selenium.isTextPresent("300.0"));

}

Page 17: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Teste SeleniumEx: Arquivo TestUsuarioDAO.java (cont.)

@Testpublic void testExcluirMensalidade() {

selenium.open(baseUrl());login();selenium.click("link=Consultar");// Selecionar Alunoselenium.select("idAluno", "2-Maria");selenium.click("btnSelecionar");selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);assertFalse(selenium.isTextPresent(" Não existe mensalidade para o aluno selecionado"));selenium.click("link=Excluir");selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);assertTrue(selenium.isTextPresent("2-Maria"));assertFalse(selenium.isTextPresent("300.0"));

}

public String baseUrl(){

return "http://localhost:8080/AcademicNetWar-DGMR/login.jsp"; }

public void login(){

selenium.type("username", "admin");selenium.type("password", "admin");selenium.click("btnEnviar");selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);selenium.click("link=Mensalidades");selenium.waitForPageToLoad(MAX_WAIT_TIME_IN_MS);

}}

Page 18: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Spring MVCEx: Arquivo DGMRServlet-servlet.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns=http://www.springframework.org/schema/beans xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

....

<bean name="/mensalidadeInserir.htm"class="br.com.senac.academicnet.controllers.MensalidadeInserirController"><property name="mensalidadeDAO">

<ref bean="mensalidadeDao"/></property><property name="dao">

<ref bean="alunoDao"/></property>

</bean>...

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename"><value>messages</value></property>

</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property>

<property name="prefix"><value>/</value></property><property name="suffix"><value>.jsp</value></property>

</bean>...<bean id="mensalidadeDao" class="br.com.senac.academicnet.dao.MensalidadeDAO">

<constructor-arg ref="dbConexao" /></bean><bean id="dbConexao" class="br.com.senac.academicnet.util.DBConexao">

<constructor-arg ref="dbConfig" /></bean><bean id="dbConfig"

class="br.com.senac.academicnet.util.DBConfig"><property name="configuracao">

<props><prop key="banco.driver">org.postgresql.Driver</prop><prop key="banco.servidor">jdbc:postgresql://localhost/AcademicNetDB</prop><prop key="banco.porta">5432</prop><prop key="banco.usuario">postgres</prop><prop key="banco.senha">post</prop>

</props></property>

</bean></beans>

Page 19: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Spring MVCEx: Arquivo MensalidadeInserirController.javapackage br.com.senac.academicnet.controllers;

import java.util.ArrayList;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.Map;import java.util.HashMap;import br.com.senac.academicnet.business.Mensalidade;import br.com.senac.academicnet.dao.AlunoDAO;import br.com.senac.academicnet.dao.MensalidadeDAO;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.AbstractController;

public class MensalidadeInserirController extends AbstractController{private Logger logger = Logger.getLogger(MensalidadeInserirController.class.getName());private MensalidadeDAO mensalidadeDAO;private AlunoDAO dao;

public void setMensalidadeDAO(MensalidadeDAO dao){this.mensalidadeDAO = dao;

}public void setDao(AlunoDAO dao){

this.dao = dao;}@Override@SuppressWarnings("unchecked")protected ModelAndView handleRequestInternal(HttpServletRequest request,

HttpServletResponse response) throws Exception {PropertyConfigurator.configure("log4j.properties");

// Recuperando parâmetros de entradalogger.info("Obtendo parâmetros de entrada.");int idAluno = Integer.parseInt(request.getParameter("idAluno"));String dataParcela = request.getParameter("dataParcela");String dataPagamento = request.getParameter("dataPagamento");double valor = Double.parseDouble(request.getParameter("valor"));

Page 20: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Spring MVCEx: Arquivo MensalidadeInserirController.java (Cont.)

// Criação de um objeto Mensalidadelogger.info("Criando um objeto Mensalidade.");Mensalidade m = new Mensalidade();m.setDataPagamento(dataPagamento);m.setDataParcela(dataParcela);m.setValor(valor);m.setIdAluno(idAluno);

logger.info("Inserindo um objeto mensalidade na tabela.");String msg = mensalidadeDAO.inserir(m);

logger.info("Recuperando a lista de alunos da tabela.");ArrayList lista = dao.listar();

logger.info("Salvando os parâmetros no HashMap");Map modelo = new HashMap();modelo.put("msg", msg);modelo.put("lista", lista);logger.info("Direcionando para a janela Inserir Mensalidade (Visão)");ModelAndView mav = new ModelAndView("mensalidadeInserir", "modelo", modelo);return mav;

}}

Page 21: Projeto Maven AcademicNet Grupo DGMR Daniel Isidoro Born Guilherme Amaral Márcio Percilio Roberto Rutz.

Spring MVCEx: Arquivo mensalidadeInserir.jsp<%@include file="_header.jsp" %>

<h1 id="title">Inserir Mensalidade por Aluno</h1><hr/>

<form action="mensalidadeInserir.htm" method="get" name="form" onsubmit="return ValidaInsercao()"><input type="hidden" name="comando" value="MensalidadeInserir" /><table width="80%" border="1" bordercolor="#000000" cellpadding="2" cellspacing="2" style="border-collapse:collapse;font-size:9pt"> <tr> <td>Selecione o aluno:</td> <td>

<select name="idAluno"><c:forEach var="alu" items="${modelo.lista}">

<option value=${alu.id}>${alu.matricula}-${alu.nome}</option></c:forEach>

</select> </td> </tr> <tr> <td>Data da Parcela:</td>

<td><input type="text" name="dataParcela" size="9" maxlength="10" onkeypress="txtBoxFormat(document.form, 'dataParcela', '99/99/9999', event); return SomenteNumero(event)" onblur="verificar_data(this)" title="Formato: dd/mm/aaaa" /></td>

</tr> <tr> <td>Data do Pagamento:</td>

<td><input type="text" name="dataPagamento" size="9" maxlength="10" onkeypress="txtBoxFormat(document.form, 'dataPagamento', '99/99/9999', event); return SomenteNumero(event)" onblur="verificar_data(this)" title="Formato: dd/mm/aaaa" /></td>

</tr> <tr> <td>Valor:</td>

<td><input type="text" name="valor" size="10" maxlength="10" onKeyPress="return(currencyFormat(this,'','.',event))" /></td> </tr> <tr> <td colspan="2"><input type="submit" value="Inserir" id="btnInserir" /></td> </tr></table>

</form>

<c:if test="${modelo.msg != null}"><hr/><h3> <c:out value="${modelo.msg}" /> </h3></c:if><%@include file="_footer.jsp" %>