Top Banner
Programação Orientada a Objetos Paulo André Castro IEC - ITA CES-22 Objetos Teste de Software e Tratamento de erros
62

Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Feb 08, 2019

Download

Documents

buikien
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Programação Orientada a Objetos

Paulo André Castro IEC - ITACES-22

Objetos

Teste de Software e Tratamento de erros

Page 2: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Testando Software

• Testar de forma eficiente é fundamental para construir software confiável e de boa qualidade

• Teste de Software tornou-se uma importante área de pesquisa dentro da Engenharia de Software e para a

Paulo André Castro IEC - ITACES-22

pesquisa dentro da Engenharia de Software e para a indústria de software em geral

• Há vários tipos de teste de software: unidade, integração, funcionais, desempenho, segurança e carga

Page 3: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Unit TestTest a single class or a single

method isolated.

Paulo André Castro IEC - ITACES-22

Integration Test

Test a group of classes that

colaborate to fulfill a

functionality.

Page 4: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Functional Test

Paulo André Castro IEC - ITACES-22

Functional Test

Test the software as a whole,

verifying if the functionality is

according to software

requirements .

Page 5: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

It is also possible to perform tests to

verify non-functional characteristics

Performance Test

Paulo André Castro IEC - ITACES-22

Security Test

Stress Test

Page 6: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Testes de Unidade com

o Framework JUnit

Paulo André Castro IEC - ITACES-22

Page 7: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Step 1 Add JUnit to classpath

Paulo André Castro IEC - ITACES-22

Access the

project

properties

Page 8: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Click the button

to add a library

Paulo André Castro IEC - ITACES-22

Page 9: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Paulo André Castro IEC - ITACES-22

Choose

JUnit 4

Page 10: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

JUnit library

should appear

on the project

Paulo André Castro IEC - ITACES-22

on the project

A good practice is to create a

new source folder to separate

test code from application code

Page 11: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Step 2 Create test class

public class TestCalc

{

...

Paulo André Castro IEC - ITACES-22

...

}The class don't need anything

special, it just need to have a

test method!

Page 12: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Step 3 Create test method

public class TestCalc {

@Test

To be a test method it needs

to have the @Test annotation

Paulo André Castro IEC - ITACES-22

@Test

public void testAdd(){

...

}

} The method needs to return void and

don't have parameters

Page 13: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

import

org.junit.Test;

You will need to import the

@Test annotation in your class

Paulo André Castro IEC - ITACES-22

@Test annotation in your class

Try that!

Page 14: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Step 4 Exercise functionality

public class TestCalc {

@Test

public void testAdd(){

Paulo André Castro IEC - ITACES-22

public void testAdd(){

Calc c = new

Calc();

int i = c.add(3,2);

}

}

Page 15: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

public class TestCalc {

@Test

public void testAdd(){

Calc c = new Calc();

Step 5 Assert expectations

Paulo André Castro IEC - ITACES-22

Calc c = new Calc();

int i = c.add(3,2);

assertEquals(5, i);

}

}

Page 16: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

assertTrue()

assertFalse()

assertEquals()

assertNotEquals()

assertSame()

import static

org.junit.Assert.*;

With this import

statement, all

functions from

class Assert

Paulo André Castro IEC - ITACES-22

assertSame()

assertNotSame()

assertNull()

assertNotNull()

fail()

class Assert

became available

on the test class

Page 17: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Paulo André Castro IEC - ITACES-22

Stop printing in the

console to test!

Page 18: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Step 6 Run the test!

on the

code or

on the

file

Paulo André Castro IEC - ITACES-22

file

Page 19: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

SUCCESS!

Green bar means

that all tests had

passed!

Paulo André Castro IEC - ITACES-22

passed!

It lists all the classes

and their respective

test methods

Page 20: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

FAILURE...

Red bar means

that there are

tests failing...

Paulo André Castro IEC - ITACES-22

tests failing...

Selecting the test, it

shows what went

wrong in the execution

Page 21: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Sometimes there is something that you

need to execute before or after each test

Initializations

Paulo André Castro IEC - ITACES-22

@Test

public void

testAdd(){...}

Clean up for next test

Page 22: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

@Before

@BeforeClass

Execute before all tests

Execute before each test

Execute before all tests

Paulo André Castro IEC - ITACES-22

@After

@AfterClassExecute after each test

Execute after all tests

Page 23: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Exercício

1. Crie uma classe ArrayMath com métodos para calcular média, mínimo e somatório de um array de doubles.

2. Crie uma classe de testes com métodos para testar cada um dos métodos da classe ArrayMath. Cada

Paulo André Castro IEC - ITACES-22

cada um dos métodos da classe ArrayMath. Cada método de testes deve usar pelo menos dois Asserts

3. Crie métodos usando @Before, @BeforeClass, @AfterClass and @After. Faça com que estes métodos de testes e inicialização escrevam algo no console e verifique a ordem de escrita dos métodos

Page 24: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

01 package arrayMath;

02

03 import static org.junit.Assert.*;

04

05 import org.junit.After;

06 import org.junit.AfterClass;

07 import org.junit.Before;

08 import org.junit.BeforeClass;

09 import org.junit.Test;

10

11 public class ArrayMathTest {

12

13 @BeforeClass

14 public static void setUpBeforeClass() throws Exception {

15 System.out.println("@BeforeClass");

16 }

Paulo André Castro IEC - ITACES-22

16 }

17

18 @AfterClass

19 public static void tearDownAfterClass() throws Exception {

20 System.out.println("@AfterClass");

21 }

22

23 @Before

24 public void setUp() throws Exception {

25 System.out.println("@Before");

26 }

27

28 @After

29 public void tearDown() throws Exception {

30 System.out.println("@After");

31 }

Page 25: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

32 @Test

33 public final void testMinimo() {

34 ArrayMath a=new ArrayMath();

35 double array[]={1,2,3,4,5,6,7,8};

36 double m=a.minimo(array);

37 assertEquals(m,1.0,Double.MIN_VALUE);

38 //assertEquals(double,double) is deprecated.

39 //Use assertEquals(double a,double b,double epsilon)

40 // That means assertEquals return true if a-b<epsilon

41 System.out.println("Test Minimo");

42 }

43 @Test

44 public final void testMedia() {

45 ArrayMath a=new ArrayMath();

46 double array[]={1,2,3,4,5,6,7,8};

Paulo André Castro IEC - ITACES-22

46 double array[]={1,2,3,4,5,6,7,8};

47 double m=a.media(array);

48 assertEquals(m,4.5,Double.MIN_VALUE);

49 System.out.println("Test Media");

50 }

51

52 @Test

53 public final void testSomatorio() {

54 ArrayMath a=new ArrayMath();

55 double array[]={1,2,3,4,5,6,7,8};

56 double s=a.somatorio(array);

57 assertEquals(s,36,Double.MIN_VALUE);

58 System.out.println("Test Somatorio");

59 } }

Page 26: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Tratamento de Erros em Java

• A melhor maneira de tratar erros Java é utilizar Exceções em substituição aos antigos códigos de retorno de Erro

Paulo André Castro IEC - ITACES-22

Page 27: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

public int portion(double value, double percent){

if(percernt > 100 || percent < 0)

return -1;return value * percent / 100;

}

Paulo André Castro IEC - ITACES-22

}

BAD IDEA

Page 28: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Why I'm

receiving -1 from

this method?

portion(5000,120)

Paulo André Castro IEC - ITACES-22

portion(5000,120);It is not clear for the

clients how errors are notified and

what kind of error can happen.

Page 29: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

It can return

-1 without error

portion(-100,1);

Paulo André Castro IEC - ITACES-22

portion(-100,1);

Sometimes all values are a

valid return in a correct

method invocation

Page 30: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

String someMethod(){...}Person otherMethod(){...}

What can I do if

the return is

Paulo André Castro IEC - ITACES-22

the return is

another class?

Page 31: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

accessfile

not exist

blocked

The application may perform different

actions for different kinds of errors.

Paulo André Castro IEC - ITACES-22

access denied

How can you communicate

what happened?

Page 32: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Don't even think

about putting

errors in a global

varible!

Paulo André Castro IEC - ITACES-22

varible!

Bad for concurrency!

You can forget to clean up and other

components will find previous erros!

Page 33: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Exceptions

Paulo André Castro IEC - ITACES-22

Exceptions

to the Job

rescue!

Page 34: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Exceptions are a

special type of class

that represent

errors and can be

Paulo André Castro IEC - ITACES-22

errors and can be

thrown to the caller.

Page 35: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

public class MyExceptionextends

Exception{...

}

Paulo André Castro IEC - ITACES-22

To be an exception, the

class should extend the

class Exception.

Page 36: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

public void method(int param) throws MyException{

…if(error){

A method should declare explicitly

which exceptions it can throw.

Paulo André Castro IEC - ITACES-22

if(error){throw new

MyException(“problem“);}…

}A new exception instance should

be created to be thrown.

Page 37: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

public void caller(){… try{

instance.method();}catch(MyException e){

//handle error

Paulo André Castro IEC - ITACES-22

//handle error}…

}

A caller can catch the exception

using the try/catch block.

Page 38: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

public void caller() throws MyException

{… instance.method();…

}

Paulo André Castro IEC - ITACES-22

}

The caller can declare

that he throws the

exception and let his

caller handle it.

Page 39: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

You can handle the

problem or send it

to another one...

Paulo André Castro IEC - ITACES-22

... but you can't

ignore it!

Page 40: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Object

Throwable

Error Exception

Paulo André Castro IEC - ITACES-22

RuntimeException

Page 41: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Error Indicates serious problems

and abnormal conditions

that a usually you should

not try to catch.

Paulo André Castro IEC - ITACES-22

CoderMalfunctionError

FactoryConfigurationError

VirtualMachineError

Page 42: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

RuntimeExceptionIndicates normal

problems that are not

manadatory to be

handled.

ArithmeticException

Paulo André Castro IEC - ITACES-22

ArithmeticException

ClassCastException

NullPointerException

IndexOutOfBoundsException

Page 43: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Exception

SQLException

Indicates problems that

can happen on class

execution that need to

be handled.

Paulo André Castro IEC - ITACES-22

SQLException

IOException

PrintException

DataFormatException

Page 44: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

When an exception is

created, it records all

Stack Trace

Paulo André Castro IEC - ITACES-22

created, it records all

the call stack from

that point.

Page 45: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

main()

a()

b()

Paulo André Castro IEC - ITACES-22

c()

d()

exception

Stack

Trace

Page 46: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

org.firebirdsql.jdbc.FBSQLException: Invalid column index.at org.firebirdsql.jdbc.FBResultSet.getField(FBResultSet.java:617)at org.firebirdsql.jdbc.FBResultSet.getField(FBResultSet.java:592)at org.firebirdsql.jdbc.FBResultSet.getFloat(FBResultSet.java:466)at com.myapplication.AccessServlet.doGet(AcessoServlet.java:50)at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

To know how to read a stack trace

is important to find errors!

Paulo André Castro IEC - ITACES-22

at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)at java.lang.Thread.run(Thread.java:595)

Page 47: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

org.firebirdsql.jdbc.FBSQLException: Invalid column index.at org.firebirdsql.jdbc.FBResultSet.getField(FBResultSet.java:617)at org.firebirdsql.jdbc.FBResultSet.getField(FBResultSet.java:592)at org.firebirdsql.jdbc.FBResultSet.getFloat(FBResultSet.java:466)at com.myapplication.AccessServlet.doGet(AcessoServlet.java:50)at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

The exception class can show

what kind of error happen.

Paulo André Castro IEC - ITACES-22

at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)at java.lang.Thread.run(Thread.java:595)

Page 48: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

org.firebirdsql.jdbc.FBSQLException: Invalid column index.at org.firebirdsql.jdbc.FBResultSet.getField(FBResultSet.java:617)at org.firebirdsql.jdbc.FBResultSet.getField(FBResultSet.java:592)at org.firebirdsql.jdbc.FBResultSet.getFloat(FBResultSet.java:466)at com.myapplication.AccessServlet.doGet(AcessoServlet.java:50)at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

The message usually

present details of the error.

Paulo André Castro IEC - ITACES-22

at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)at java.lang.Thread.run(Thread.java:595)

Page 49: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

org.firebirdsql.jdbc.FBSQLException: Invalid column index.at org.firebirdsql.jdbc.FBResultSet.getField(FBResultSet.java:617)at org.firebirdsql.jdbc.FBResultSet.getField(FBResultSet.java:592)at org.firebirdsql.jdbc.FBResultSet.getFloat(FBResultSet.java:466)at

When the error doesn't happen

on your classes, look for the first

one on the stack trace.

Paulo André Castro IEC - ITACES-22

at

com.myapplication.AccessServlet.doGet(AcessoServlet.java:50)at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)at

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)at

Page 50: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Paulo André Castro IEC - ITACES-22

Handling

Exceptions

Page 51: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

beforeTry();try{

beforeError();

instance.method();afterError();

}catch(MyException e){

Paulo André Castro IEC - ITACES-22

}catch(MyException e){handleError(e);

}afterTry();

When a exception

happens, the execution

jumps to the catch block

and continues just after it.

Page 52: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

try{instance.method();

}catch(IOException e){handleIO(e);

You can catch more than

one exception type, but

only one will be executed.

Subclass

Paulo André Castro IEC - ITACES-22

handleIO(e);}catch(Exception e){

handleOther(e);}

Exception

IOException

Subclass

comes first!

Page 53: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

try{con =

createConnection();//access database

}catch(SQLException e){handleError(e);

}finally{

Paulo André Castro IEC - ITACES-22

}finally{con.close()

}

You can use the block finally to ensure

that something will be executed with or

without exception!

Page 54: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

try{con = createConnection();//access databasereturn something;

Even with a return statement

finally is executed!

Paulo André Castro IEC - ITACES-22

return something;

}catch(SQLException e){handleError(e);

}finally{con.close()

}

Page 55: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

try{a();

}catch(Exception e){handleError(e);

try{a();b();

}catch(Exception e){

Watch where you put

your try/catch blocks!

Paulo André Castro IEC - ITACES-22

handleError(e);}try{

b();}catch(Exception e){

handleError(e);}

}catch(Exception e){handleError(e);

}

If error happen on a(), b()

will not be executed!

Page 56: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Testing

Exceptions

Paulo André Castro IEC - ITACES-22

Page 57: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

When you need to verify if

a class throw an

exception in a given

situation!

Paulo André Castro IEC - ITACES-22

@Test(expected=BoomException.class)public void testException(){

instance.boom();}

situation!

Page 58: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

@Test(expected=MyException.class)public void testException() throws Exception {

//do a lot of stuff}

Paulo André Castro IEC - ITACES-22

But the test will be correct if

the exception is thrown

anywhere in the test method!

Page 59: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

try{instance.boom();fail();

}catch(BoomException e){

Execution should

never reach this line!

Paulo André Castro IEC - ITACES-22

}catch(BoomException e){//verify exception if needed

}If the exception is expected to

be thrown in a specific point,

you should use try/fail.

Page 60: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

@Testpublic void testException()

throws

BoomException{//This scenario should//never throw exception

}

Paulo André Castro IEC - ITACES-22

}

If your test don't care about

the exception, just declare

that the method throw it...

Page 61: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

Exercício Testando Exceptions

1. Crie uma nova versão da classe ArrayMath. Seus métodos devem lançar exceções caso recebam um array nulo como parâmetro.

2. A exceção lançada deve ser uma ArrayMathException e conter uma mensagem sobre o erro.

Paulo André Castro IEC - ITACES-22

e conter uma mensagem sobre o erro.3. Crie uma nova versão da classe ArrayMathTest. Corrija

os métodos de testes anteriores para que estes funcionem corretamente.

4. Crie novos métodos de teste para verificar se é lançada a exceção esperada ao ser passado null como parâmetro.

Page 62: Programação Orientada a Objetospauloac/ces22/cap.3.pdf · Programação Orientada a Objetos Paulo André Castro CES-22 IEC - ITA Teste de Software e Tratamento de erros. Testando

É possível executar todos os testes de um project, package, ou souce folder com um click

Paulo André Castro IEC - ITACES-22