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

Upload: internet

Post on 17-Apr-2015

108 views

Category:

Documents


0 download

TRANSCRIPT

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" %>