Upload
internet
View
109
Download
0
Embed Size (px)
Citation preview
Projeto Maven AcademicNet Grupo DGMR
Daniel Isidoro BornGuilherme Amaral
Márcio PercilioRoberto Rutz
Implementações
• Logging• Script do banco de dados• Arquivo de propriedades com Spring DI• Testes Junit• Teste DBUnit• Teste Selenium• Spring MVC
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
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"));...
}...}
LoggingEx: Arquivo de saída: HTMLLayout.html
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--
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>
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() );}
}
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);
}}
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);
}}
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;
}}
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);
}}
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);
}
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);
}}
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();}
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"));
}
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);
}}
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>
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"));
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;
}}
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" %>