background image

Programo

w

anie

obiekto

w

e

(Ja

v

a)



10

1

P

om

yªk

a

P

o

dsta

w

o

w

¡

ideologi¡

Ja

vy

1

jest

zaªo»enie,

»e

'¹le

sform

uªo

w

an

y

k

o

d

nie

zostanie

wyk

onan

y'



Przykªad:

Istniej¡

dwie

publi zne

klasy

w

dwó

h

plik

a

h

M ain.java

i

T est.java

:

1

pa kage

pl .kiel e . tu.lab10 ;

2

3

publi

lass

Main

{

4

publi

stati

void

main (String [℄

args )

{

5

Test

t

=

new

Test ();

6

}

7

}

Przykªad

1:

sr /pl/kiel e/tu/lab10/Main.ja

v

a

{link}

1

pa kage

pl .kiel e . tu.lab10 ;

2

3

publi

lass

Test

{

4

publi

Test ()

{

5

}

6

}

Przykªad

2:

sr /pl/kiel e/tu/lab10/T

est.ja

v

a

{link}

K

ompila ja

i

uru

homienie:

1

java

pl\ kiel e \tu \lab10 \Test .java

2

java

pl\ kiel e \tu \lab10 \Main .java

3

java

pl.kiel e

.tu. lab10 .Main

Aplik

a ja

dziaªa

p

opra

wnie.

Co

stanie

si

je±li

k

onstruktor

klasy

T est

u zynim

y

pryw

atn

ym,

a

nastpnie

przez

'p

om

yªk

'

sk

ompilujem

y

t

ylk

o

klas

T est

(zap

omina

o

klasie

M ain

)

i

uru

homim

y

aplik

a j?

Ex eption

in

thread

"main "

java. lang .IllegalA essError

:

tried

to

a ess

method

←֓

pl.kiel e

.tu. lab10 .Test .<init >() V

from

lass

pl.kiel e

.tu.lab10 . Main

at

pl.kiel e

.tu. lab10 .Main .main (Main .java :5)

2

W

yj¡tek



W

yj¡tek

(ex eption)

[2



Sp

e jaln

y

b

yt

programist

y zn

y

p

o

w

o

duj¡ y

przerw

anie

lub

za

wieszenie

normal-

nej

nitki

stero

w

ania

program

u

i

przej± ie

do

sp

e jalnego

fragmen

tu

program

u

za

jm

uj¡ ego

si

obsªug¡

tego

wyj¡tku.

(.

.

.

)



W

sytua ji

wyj¡tk

o

w

ej

[2

nie

mo»na

k

on

t

yn

uo

w

przet

w

arzania,

p

oniew

w

aktualn

ym

k

on

tek± ie

nie

ma

dostpu

do

informa ji

k

onie znej

do

rozwi¡zania

problem

u.

W

szystk

o,

o

mo»na

zrobi¢,

to

wyj±¢

z

aktualnego

k

on

tekstu

i

przek

aza¢

problem

dalej.

T

ak

si

wªa±nie

dzieje

gdy

zgªaszan

y

jest

wyj¡tek."

W

jaki

sp

osób

p

o

dobne

problem

y

zostaªy

rozwi¡zane

w

jzyk

a

h,

w

który

h

nie

ma

wyj¡tk

ó

w

(np.

w

C)?

Klasa

Thro

w

able

opisuje

wszystk

o

o

mo»e

b

zgªoszone

jak

o

wyj¡tek.

Istniej¡

dw

a

ro

dza

je

obiektó

w

Thro

w

able

(.

.

.

).

Error

reprezen

tuje

bªdy

k

ompila ji

i

system

u

(.

.

.

).

Ex eption

jest

p

o

dsta

w

o

wym

t

yp

em,

jaki

mo»e

b

wyrzu on

y

z

do

w

olnej

meto

dy

klasy

biblioteki

standardo

w

ej

Ja

vy

i

wªasnej

meto

dy

lub

w

wyniku

inn

y

h

bªdó

w

przy

wyk

onaniu.

W

yj¡tki

dzielim

y

na:

1

Thinking

in

Ja

v

a,

Bru e

E

k

el,

W

ydanie

IV,

Helion,

2006

1

background image

-

niew

eryk

o

w

alne

(niespra

wdzalne,

niek

on

trolo

w

ane,

ang.

un

he

k

ed)



wyj¡tek

Run

timeEx eption

oraz

klasy

p

otomne,

k

ompilator

nie

w

erykuje

zy

tego

t

ypu

wyj¡tek

jest

zgªaszan

y

lub

obsªugiw

an

y

przez

meto

d,

-

w

eryk

o

w

alne

(spra

wdzalne,

k

on

trolo

w

ane)



inne

wyj¡tki.

Hierar

hia

klas:

1

java .lang .Obje t

2

extended

by

java . lang. Throwable

3

extended

by

java .lang .Ex eption

1

java .lang .Obje t

2

extended

by

java . lang. Throwable

3

extended

by

java .lang .Ex eption

4

extended

by

java .lang .RuntimeEx eption

1

java .lang .Obje t

2

extended

by

java . lang. Throwable

3

extended

by

java .lang .Error

T

w

orzenie

klas

wªasn

y

h

wyj¡tk

ó

w:

1

pa kage

pl .kiel e . tu.lab10 ;

2

3

publi

lass

MyEx eption

extends

Ex eption

{

4

}

Przykªad

3:

sr /pl/kiel e/tu/lab10/MyEx eption.ja

v

a

{link}

1

pa kage

pl .kiel e . tu.lab10 ;

2

3

publi

lass

MyRuntimeEx eption

extends

RuntimeEx eption

{

4

}

Przykªad

4:

sr /pl/kiel e/tu/lab10/MyRun

timeEx eption.ja

v

a

{link}

Blok

prób

(ang.

try)

[2



blok

prze

h

wytuj¡ y

wyj¡tki.

Pro

edury

obsªugi

wyj¡tku

[2℄

nastpuj¡

b

ezp

o±rednio

p

o

bloku

try

i

ozna zane

p

oprzez

sªo

w

o

klu zo

w

e

catch



Sek

ja

f inally



fragmen

t

k

o

du,

który

h ielib

y±m

y

wyk

ona¢

niezale»nie

o

d

tego,

zy

w·bloku

try

zostanie

zgªoszon

y

wyj¡tek

Zgªaszanie

wyj¡tk

ó

w:

"(...)

mo»na

zgªosi¢

k

a»dy

ro

dza

j

obiektu,

który

mo»na

wyrzu i¢

tj.

dziedzi z¡ y

p

o

klasie

T hrowable

"

np.

throw new M yException

()

.

Prze

h

wy enie

wszystki

h

wyj¡tk

ó

w:

1

try

{

2

...

3

}

at h

(Ex eption

e){

4

e.printSta kTra e

();

5

}

Zastoso

w

anie

sym

b

olu

"|"

(or)

umo»liwia

st

w

orzenie

bloku

at h,

w

którym

realizo

w

ana

jest

obsªuga

wielu

wyj¡tk

ó

w.

P

oni»ej

przedsta

wiono

przykªady

obsªugi

dw

ó

h

wyj¡tk

ó

w:

1

try

{

2

...

3

}

at h

(Arithmeti Ex eption

|

ArrayIndexOutOfBoundsEx eptio n

e){

4

e.printSta kTra e

();

5

}

2

background image

1

try

{

2

...

3

}

at h

(Arithmeti Ex eption

e1){

4

e1. printSta kTra e

();

5

}

at h

(ArrayIndexOutOfBoundsEx epti on

e2 ){

6

e2. printSta kTra e

();

7

}

Rozszerzona

forma

wyra»enia

try

zw

ana

try-with-r

esour

e

ma

nastpuj¡ ¡

p

osta¢

[1

℄:

1

try

{spe yfika ja

- zasobu }

{

2

//

uzy ie

zasobu

3

}

Mo»e

zosta¢

ona

wyk

orzystana

t

ylk

o

z

zasobami

implemen

tuj¡ ymi

in

terfejs

java.lang.A

utoClose

able,

który

p

osiada

t

ylk

o

jedn¡

meto

d

lose().

In

terfejsy

ten

rozszerza

java.io.Close

able,

który

tak»e

p

osiada

t

ylk

o

jedn¡

meto

d

lose().

Skªadnia

ta

jest

zsto

wyk

orzyst

yw

ana

w

p

o

wi¡zaniu

ze

strumieniami,

np.

plik

o

wymi.



W

meto

dzie

prze i¡»onej

mo»na

zgªasza¢

jedynie

te

wyj¡tki,

które

zostaªy

p

o

dane

w

sp

e yk

a ji

z

klasy

bazo

w

ej.

(.

.

.

)

Mo»na

zanie

ha¢

wyrzu ania

jaki

hk

olwiek

wyj¡tk

ó

w

p

omimo

i

h

ob

e no± i

w

klasie

bazo

w

ej.

1

publi

lass

TestCat h

{

2

publi

stati

void

main (String [℄

args )

throws

Ex eption

{

3

Random

r

=

new

Random

(

new

Date ().getTime

()

>>>

(

new

Date () .getTime ()

%

4));

4

try

{

5

swit h

(r.nextInt

()

%

4)

{

6

ase

0:

System . out. print (

"0.

"

);

7

throw

new

MyEx eption

() ;

8

ase

1:

System . out. print (

"1.

"

);

9

throw

new

MyRuntimeEx eption

();

10

ase

2:

System . out. print (

"2.

"

);

11

throw

new

NullPointerEx eption

() ;

12

default

:

System

.out .print (

"3.

"

);

13

throw

new

FileNotFoundEx eption

() ;

14

}

15

}

at h

(MyEx eption

e)

{

16

System

.out. println (

" e.getClass

().getSimpleName

()

=

"

+

e. getClass () .getSimpleName

()) ;

17

}

at h

(FileNotFoundEx eption

e)

{

18

System

.out. println (

" e.getClass

().getSimpleName

()

=

"

+

e. getClass () .getSimpleName

()) ;

19

}

at h

(Ex eption

e)

{

20

//

obsªuga

wszystki h

pozostaªy h

wyj¡tków

21

System

.out. println (

" e.getClass

().getSimpleName

()

=

"

+

e. getClass () .getSimpleName

()) ;

22

System

.out. println (

" e.getMessage

()

=

"

+

e. getMessage

());

23

//

zwra a

sz zegóªow¡

informa j

24

System

.out. println (

" e.getLo alizedMessage

()

=

"

+

e. getLo alizedMessage

());

25

System

.out. println (

" e.printSta kTra e

() "

);

26

e. printSta kTra e

(System . out) ;

//

drukuje

komunikat

oraz

stos

wywoªa«

27

System

.out. println (

" e.getCause

()

=

"

+

e.getCause

()) ;

//

zwra a

przy zyn

28

}

29

}

30

}

Przykªad

5:

sr /pl/kiel e/tu/lab10/T

estCat

h.ja

v

a

{link}

Co

si

stanie

je»eli

wyj¡tek

nie

zostanie

wyªapan

y?

Która

z

p

oni»szy

h

deni ji

jest

nie

p

opra

wna

i

dla zego?

1

publi

lass

TestThrows

{

2

publi

void

a ()

{

3

throw

new

MyEx eption

();

4

}

5

3

background image

6

publi

void

b ()

{

7

throw

new

MyRuntimeEx eption

() ;

8

}

9

10

publi

void

 ()

throws

Ex eption

{

11

throw

new

MyEx eption

();

12

}

13

14

publi

void

d ()

throws

Ex eption

{

15

throw

new

MyRuntimeEx eption

() ;

16

}

17

18

publi

void

e ()

throws

RuntimeEx eption

{

19

throw

new

MyEx eption

();

20

}

21

22

publi

void

f ()

throws

RuntimeEx eption

{

23

throw

new

MyRuntimeEx eption

() ;

24

}

25

26

publi

void

g ()

throws

MyEx eption

{

27

throw

new

MyEx eption

();

28

}

29

30

publi

void

h ()

throws

MyEx eption

{

31

throw

new

MyRuntimeEx eption

() ;

32

}

33

34

publi

void

i ()

throws

MyRuntimeEx eption

{

35

throw

new

MyEx eption

();

36

}

37

38

publi

void

j ()

throws

MyRuntimeEx eption

{

39

throw

new

MyRuntimeEx eption

() ;

40

}

41

42

publi

void

k ()

throws

MyEx eption

,

MyRuntimeEx eption

{

43

return

;

44

}

45

}

Przykªad

6:

sr /pl/kiel e/tu/lab10/T

estThro

ws.ja

v

a

{link}

1

publi

lass

TestFinally

{

2

stati

void

method

()

throws

MyEx eption

{

3

Random

r

=

new

Random

();

4

if

(r.nextInt

()

%

2

==

0)

{

5

System

.out. println (

" method ()

throw "

);

6

throw

new

MyEx eption

();

7

}

else

{

8

System

.out. println (

" method ()

return "

);

9

return

;

10

}

11

}

12

13

publi

stati

void

main (String [℄

args )

{

14

try

{

15

method

();

16

System

.out. println (

" main()

return "

);

17

return

;

18

}

at h

(MyEx eption

e)

{

4

background image

19

System

.out. println (

" main()

at h

"

+

e );

20

}

finally

{

21

System

.out. println (

" main()

finally

"

);

22

}

23

}

24

}

Przykªad

7:

sr /pl/kiel e/tu/lab10/T

estFinally

.ja

v

a

{link}

3

T

yp

o

w

e

sp

osob

y

obsªugi

wyj¡tk

ó

w

T

yp

o

w

e

sp

osob

y

obsªugi

wyj¡tk

ó

w

zrealizo

w

ano

na

p

o

dsta

wie:

Ja

v

a.

Obsªuga

wyj¡tk

ó

w,

usu

w

anie

bªdó

w

i

testo

w

anie

k

o

du,

Stephen

Stelting,

Helion,

2005.

3.1

Zapis

bªdu

lub

zwi¡zanej

z

nim

informa ji

do

dziennik

a

Informa ja

o

bªdzie

mo»e

zosta¢

wy±wietlona

na

k

onsoli

lub

przekiero

w

ana

do

pliku.

W

bardziej

zaa

w

an-

so

w

an

y

h

rozwi¡zania

h

nale»aªob

y

u»y¢

J avaLoggingAP I

.

W

przykªadzie

p

oni»ej

informa ja

o

wyj¡tku

jest

wy±wietlana

na

k

onsoli

przy

p

omo

y

System.out,

zapisyw

ana

w

pliku

przy

p

omo

y

przekiero

w

anego

System.err

oraz

wy±wietlana

w

oknie

dialogo

wym.

1

publi

lass

MyClass

{

2

stati

String

getLanguage

()

throws

Ex eption

{

3

throw

new

Ex eption

(

" My

ex eption

"

) ;

4

}

5

}

Przykªad

8:

sr /pl/kiel e/tu/lab10/MyClass.ja

v

a

{link}

1

publi

lass

TestEx eption1

{

2

3

stati

{

4

try

{

5

System

.setErr (

new

PrintStream

(

"log .txt "

));

6

}

at h

(FileNotFoundEx eption

ignored )

{

7

ignored

.printSta kTra e

() ;

8

}

9

}

10

11

publi

stati

void

main (String [℄

args )

{

12

try

{

13

MyClass

.getLanguage

() ;

14

}

at h

(Ex eption

e)

{

15

e. printSta kTra e

(System . out) ;

16

e. printSta kTra e

(System . err) ;

17

JOptionPane

.showMessageDialog

(

null

,

e) ;

18

}

19

}

20

}

Przykªad

9:

sr /pl/kiel e/tu/lab10/T

estEx eption1.ja

v

a

{link}

3.2

Zwró

enie

si

do

u»ytk

o

wnik

a

z

pro±ba

o

p

o

dje ie

o

dp

o

wiedniej

de yzji

1

publi

lass

TestEx eption2

{

2

3

publi

stati

void

main (String [℄

args )

{

5

background image

4

try

{

5

MyClass

.getLanguage

() ;

6

}

at h

(Ex eption

e)

{

7

int

answer

=

JOptionPane

. showConfirmDialog

(

null

,

"End ?"

,

"Confirm

Dialog "

,

←֓

JOptionPane

.YES_NO_OPTION

,

JOptionPane

.ERROR_MESSAGE

);

8

if

(answer

==

JOptionPane

.YES_OPTION

)

9

System

.out .println (

"End"

);

10

else

11

System

.out .println (

"Not

end"

);

12

}

13

}

14

}

Przykªad

10:

sr /pl/kiel e/tu/lab10/T

estEx eption2.ja

v

a

{link}

3.3

U»y ie

w

arto± i

dom

y±ln

y

h

lub

alternat

ywn

y

h

1

publi

lass

TestEx eption3

{

2

3

final

private

stati

String

DEFAULT_LANGUAGE

=

"EN "

;

4

private

stati

String

language ;

5

6

publi

stati

void

main (String [℄

args )

{

7

try

{

8

language

=

MyClass .getLanguage

();

9

}

at h

(Ex eption

e)

{

10

language

=

DEFAULT_LANGUAGE

;

11

}

12

}

13

}

Przykªad

11:

sr /pl/kiel e/tu/lab10/T

estEx eption3.ja

v

a

{link}

3.4

Przek

azanie

stero

w

ania

do

innej

z± i

aplik

a ji

1

publi

lass

TestEx eption4

{

2

3

publi

stati

void

main (String [℄

args )

{

4

try

{

5

MyClass

.getLanguage

() ;

6

}

at h

(Ex eption

e)

{

7

reset () ;

8

}

9

}

10

11

stati

void

reset

(){

12

//

...

13

}

14

}

Przykªad

12:

sr /pl/kiel e/tu/lab10/T

estEx eption4.ja

v

a

{link}

3.5

K

on

w

ersja

wyj¡tku

do

innej

p

osta i

Zaªó»m

y

,

»e

klasa

p

o

winna

implemen

to

w

in

terfejs

M yInterf ace

,

a

w

ewn¡trz

meto

dy

method

()

p

o

winna

wyw

oªa¢

M yClass.getLanguage

()

,

która

mo»e

zgªosi¢

wyj¡tek.

Do

danie

frazy

throws Exception

do

sygna-

tury

meto

dy

method

()

nie

jest

mo»liw

e

p

oniew

wtedy

nie

b

dzie

si

ona

zgadza¢

z

sygnatur¡

meto

dy

6

background image

w

in

terfejsie.

W

takim

przypadku

mo»em

y

u»y¢

wyj¡tku

niespra

wdzalnego,

który

jak

o

przy zyn

b

dzie

miaª

usta

wion

y

nasz

wyj¡tek

(

throw new RuntimeException

(e)

).

1

publi

interfa e

MyInterfa e

{

2

publi

void

method

();

3

}

Przykªad

13:

sr /pl/kiel e/tu/lab10/MyIn

terfa e.ja

v

a

{link}

1

publi

lass

TestEx eption5

implements

MyInterfa e

{

2

3

Override

4

publi

void

method

()

{

//

!!!

throws

Ex eption

{

5

try

{

6

MyClass

.getLanguage

() ;

7

}

at h

(Ex eption

e)

{

8

throw

new

RuntimeEx eption

(e) ;

9

}

10

}

11

12

publi

stati

void

main (String [℄

args )

{

13

TestEx eption5

t

=

new

TestEx eption5

() ;

14

t.method

();

15

}

16

}

Przykªad

14:

sr /pl/kiel e/tu/lab10/T

estEx eption5.ja

v

a

{link}

3.6

Zignoro

w

anie

problem

u

Jest

bardzo

maªo

przypadk

ó

w,

kiedy

mo»na

zignoro

w

wyst¡

pienie

wyj¡tku

dlatego

na

jlepiej

nie

stoso

w

tej

te

hniki.

1

publi

lass

TestEx eption6

{

2

3

publi

stati

void

main (String [℄

args )

{

4

try

{

5

MyClass

.getLanguage

() ;

6

}

at h

(Ex eption

ignore

)

{

7

}

8

}

9

}

Przykªad

15:

sr /pl/kiel e/tu/lab10/T

estEx eption6.ja

v

a

{link}

3.7

P

o

wtórzenie

op

era ji

W

p

oni»szym

przypadku

trzykrotnie

wyw

oªyw

ana

jest

meto

da

getLanguage

()

.

P

omidzy

p

osz zególn

ymi

wyw

oªaniami

mo»na

zastoso

w

o

dstp

zaso

wy

(

T imeU nit.SECON DS.sleep

(1)

).

Je»eli

meto

da

nie

zgªosi-

ªab

y

wyj¡tku

instruk

ja

break

sp

o

w

o

duje

przerw

anie

wyk

on

yw

ania

p

tli.

1

publi

lass

TestEx eption7

{

2

publi

stati

void

main (String [℄

args )

{

3

int

ounter

=

0;

4

while

(  ounter ++

<

3)

{

5

try

{

6

MyClass

.getLanguage

();

7

break

;

8

}

at h

(Ex eption

e )

{

7

background image

9

System

.err .println (

"Ex eption

no.

"

+

ounter );

10

e .printSta kTra e

() ;

11

try

{

12

TimeUnit . SECONDS .sleep (1) ;

13

}

at h

(InterruptedEx eption

e2)

{

14

e2.printSta kTra e

();

15

}

16

}

17

}

18

}

19

}

Przykªad

16:

sr /pl/kiel e/tu/lab10/T

estEx eption7.ja

v

a

{link}

3.8

W

yw

oªanie

op

era ji

alternat

ywnej

1

publi

lass

TestEx eption8

{

2

3

publi

stati

void

main (String [℄

args )

{

4

try

{

5

MyClass

.getLanguage

() ;

6

}

at h

(Ex eption

e)

{

7

getLanguageFromFile

() ;

8

}

9

}

10

11

stati

void

getLanguageFromFile

()

{

12

//

...

13

}

14

}

Przykªad

17:

sr /pl/kiel e/tu/lab10/T

estEx eption8.ja

v

a

{link}

3.9

Przygoto

w

anie

aplik

a ji

do

zamkni ia

Przed

zamkni iem

aplik

a ji

mo»e

wyst¡

pi¢

k

onie zno±¢:

-

zamkni ia

ot

w

art

y

h

plik

ó

w,

-

zamkni ia

ot

w

art

y

h

p

oª¡ ze«

sie io

wy

h,

bazo

dano

wy

h

itp.,

-

zapisanie

dan

y

h,

-

p

oinformo

w

anie

inn

y

h

aplik

a ji,

systemó

w

itp.

o

t

ym

fak

ie.

1

publi

lass

TestEx eption9

{

2

3

publi

stati

void

main (String [℄

args )

{

4

try

{

5

MyClass

.getLanguage

() ;

6

}

at h

(Ex eption

e)

{

7

/*

zamkni ie

otwarty h

plików

,

8

zamkni ie

otwarty h

poª¡ ze«

sie iowy h

,

bazodanowy h

itp

9

zapisanie

dany h ,

10

poinformowanie

inny h

aplika ji

,

systemów

itp.

o

tym

fak ie .

11

12

zamkni ie

aplika ji

13

jako

parametr

podaje

si

"kod

statusu

"

14

warto± i

inne

ni»

0

ozna zaj¡

nienormalne

zamkni ie

aplika ji

*/

8

background image

15

System

.exit (1);

16

}

17

}

18

}

Przykªad

18:

sr /pl/kiel e/tu/lab10/T

estEx eption9.ja

v

a

{link}

4

P

o

dsta

w

o

w

e

wyj¡tki

W

yj¡tki

zdenio

w

ane

w

pakie ie

ja

v

a.lang

ˆ

Arithmeti Ex eption

ˆ

Arra

yIndexOutOfBoundsEx eption

ˆ

Arra

yStoreEx eption

ˆ

ClassCastEx eption

ˆ

ClassNotF

oundEx eption

ˆ

CloneNotSupp

ortedEx eption

ˆ

En

umConstan

tNotPresen

tEx eption

ˆ

Ex eption

ˆ

IllegalA

essEx eption

ˆ

IllegalArgumen

tEx eption

ˆ

IllegalMonitorStateEx eption

ˆ

IllegalStateEx eption

ˆ

IllegalThreadStateEx eption

ˆ

IndexOutOfBoundsEx eption

ˆ

Instan

tiationEx eption

ˆ

In

terruptedEx eption

ˆ

Negativ

eArra

ySizeEx eption

ˆ

NoSu

hFieldEx eption

ˆ

NoSu

hMetho

dEx eption

ˆ

NullP

oin

terEx eption

ˆ

Num

b

erF

ormatEx eption

ˆ

Ree tiv

eOp

erationEx eption

ˆ

Run

timeEx eption

ˆ

Se urit

yEx eption

ˆ

StringIndexOutOfBoundsEx eption

ˆ

T

yp

eNotPresen

tEx eption

ˆ

Unsupp

ortedOp

erationEx eption

9

background image

W

yj¡tki

zdenio

w

ane

w

pakie ie

ja

v

a.util

ˆ

Con urren

tMo

di ationEx eption

ˆ

Dupli ateF

ormatFlagsEx eption

ˆ

Empt

ySta

kEx eption

ˆ

F

ormatFlagsCon

v

ersionMismat

hEx eption

ˆ

F

ormatterClosedEx eption

ˆ

IllegalF

ormatCo

deP

oin

tEx eption

ˆ

IllegalF

ormatCon

v

ersionEx eption

ˆ

IllegalF

ormatEx eption

ˆ

IllegalF

ormatFlagsEx eption

ˆ

IllegalF

ormatPre isionEx eption

ˆ

IllegalF

ormatWidthEx eption

ˆ

IllformedLo

aleEx eption

ˆ

InputMismat

hEx eption

ˆ

In

v

alidProp

ertiesF

ormatEx eption

ˆ

MissingF

ormatArgumen

tEx eption

ˆ

MissingF

ormatWidthEx eption

ˆ

MissingResour eEx eption

ˆ

NoSu

hElemen

tEx eption

ˆ

T

o

oMan

yListenersEx eption

ˆ

Unkno

wnF

ormatCon

v

ersionEx eption

ˆ

Unkno

wnF

ormatFlagsEx eption

ˆ

Ree tiv

eOp

erationEx eption

ˆ

Run

timeEx eption

ˆ

Se urit

yEx eption

ˆ

StringIndexOutOfBoundsEx eption

ˆ

T

yp

eNotPresen

tEx eption

ˆ

Unsupp

ortedOp

erationEx eption

10

background image

5

Aser je

Staªe

1

publi

lass

TestStati

{

2

3

final

private

stati

boolean

TEST

=

true

;

4

5

stati

int

age

=

-1;

6

7

publi

stati

void

main (String [℄

args )

{

8

if

( TEST )

9

if

(age

<

0)

10

throw

new

RuntimeEx eption

(

" Not

orre t

value :

age

=

"

+

age );

11

System . out.println

(

"My

age

=

"

+

age );

12

}

13

}

Przykªad

19:

sr /pl/kiel e/tu/lab10/T

estStati .ja

v

a

{link}

TEST

=

false

publi

stati

void

main (java .lang .String [℄) ;

Code :

0:

getstati

#2

//

Field

java /lang /System

.out :Ljava /io /PrintStream

;

3:

new

#3

//

lass

java /lang /StringBuilder

...

TEST

=

true

publi

stati

void

main (java .lang .String [℄) ;

Code :

0:

getstati

#2

//

Field

age :I

3:

ifge

35

6:

new

#3

//

lass

java /lang /RuntimeEx eption

9:

dup

10:

new

#4

//

lass

java /lang /StringBuilder

13:

dup

14:

invokespe ial

#5

//

Method

java /lang /StringBuilder

."< init >":() V

17:

ld

#6

//

String

Not

orre t

value :

age

=

19:

invokevirtual

#7

//

Method

←֓

java/ lang/ StringBuilder

.append :(Ljava

/lang /String ;) Ljava /lang /StringBuilder

;

22:

getstati

#2

//

Field

age :I

25:

invokevirtual

#8

//

Method

java /lang /StringBuilder

.append

:(I) Ljava /lang /StringBuilder

;

28:

invokevirtual

#9

//

Method

java /lang /StringBuilder

.toString

:() Ljava /lang /String

;

31:

invokespe ial

#10

//

Method

java / lang/ RuntimeEx eption

."< init >":( Ljava /lang /String ;) V

34:

athrow

35:

getstati

#11

//

Field

java /lang / System .out :Ljava /io /PrintStream

;

38:

new

#4

//

lass

java /lang /StringBuilder

...

Aser je

"Stosunk

o

w

o

no

wym

elemen

tem

w

Ja

vie

jest

sªo

w

o

klu zo

w

e

assert

[1℄.

W

trak

ie

t

w

orzenia

i

testo

w

ania

programó

w

u»yw

a

si

go

do

aser ji,

zyli

spra

wdzania,

zy

dan

y

w

arunek

jest

sp

eªnion

y

w

trak

ie

dziaªania

program

u."

Wª¡ zanie

aser ji:

1

java

-ea[:< pa kagename

>...|:<

lassname

>℄

klasaPosiadaja aMetodeMain

11

background image

2

java

-enableassertions

[:< pa kagename

>...|:<  lassname

>℄

klasaPosiadaja aMetodeMain

1

publi

lass

TestAssertion

{

2

3

stati

int

age

=

-1;

4

5

publi

stati

void

main (String [℄

args )

{

6

assert

age

>=

0

:

"Not

orre t

value :

age

=

"

+

age;

7

System . out.println

(

"My

age

=

"

+

age );

8

}

9

}

Przykªad

20:

sr /pl/kiel e/tu/lab10/T

estAssertion.ja

v

a

{link}

Uru

homienie:

java

pl.kiel e

.tu. lab10 .TestAssertion

W

ynik

dziaªania:

My

age

=

-1

Uru

homienie:

java

-ea

pl.kiel e

.tu.lab10

.TestAssertion

W

ynik

dziaªania:

Ex eption

in

thread

"main "

java. lang .AssertionError

:

Not

orre t

value :

age

=

-1

at

pl.kiel e

.tu. lab10 .TestAssertion

.main (TestAssertion

.java :8)

Deasem

bla ja:

javap

-

pl.kiel e

.tu.lab10

.TestAssertion

W

ynik

deasem

bla ji:

Compiled

from

"TestAssertion

.java "

publi

lass

pl.kiel e . tu.lab10 . TestAssertion

{

stati

int

age;

stati

final

boolean

$assertionsDisabled

;

publi

pl.kiel e

.tu. lab10 .TestAssertion

();

Code :

0:

aload_0

1:

invokespe ial

#1

//

Method

java /lang /Obje t

."<init >":() V

4:

return

publi

stati

void

main ( java. lang. String [℄) ;

Code :

0:

getstati

#2

//

Field

\$assertionsDisabled

:Z

3:

ifne

41

6:

getstati

#3

//

Field

age :I

9:

ifge

41

12:

new

#4

//

lass

java /lang /AssertionError

15:

dup

16:

new

#5

//

lass

java /lang /StringBuilder

19:

dup

20:

invokespe ial

#6

//

Method

java /lang /StringBuilder

."< init >":() V

23:

ld

#7

//

String

Not

orre t

value :

age

=

12

background image

25:

invokevirtual

#8

//

Method

←֓

java/ lang/ StringBuilder

.append :(Ljava

/lang /String ;) Ljava /lang /StringBuilder

;

28:

getstati

#3

//

Field

age :I

...

6

R

TTI

Informa je

o

t

ypie

w

zasie

wyk

onania

(ang.

run-time

t

yp

e

information,

R

TTI)

p

ozw

ala

na

iden

t

yk

a j

t

yp

ó

w

i

wyk

orzyst

yw

anie

informa ji

o

ni

h

w

zasie

dziaªania

program

u.

Op

erator

instanceof

oraz

meto

da

isInstan e()

zostaªy

omó

wione

na

w

ze±niejszy

h

za

j ia

h.

Obiekt

Class

za

wiera

informa je

o

m.in.

k

onstrukta

h

(np.

getConstructors

()

,

getDeclaredConstructors

()

),

meto

da

h

(np.

getM ethods

()

,

getDeclaredM ethods

()

)

oraz

atrybuta

h

(p

ola

h)

klasy

(np.

getF ields

()

,

getDeclaredF ields

()

).

Sz zegóªy

dot

y z¡ e

klasy

Class

mo»na

znale¹¢

na

stronie:

h

ttp://do

s.ora le. om/ja

v

ase/7/do  s/a

pi/ja

v

a/la

ng/

Class

.h

tml

1

publi

lass

TestRTTI

{

2

publi

int

i

=

1234;

3

stati

{

4

System . out.println

(

"Stati

init "

);

5

}

6

7

publi

TestRTTI

()

{

8

System . out.println

(

"Constru tor

TestRTTI

()"

) ;

9

}

10

11

publi

int

getI ()

{

12

System . out.println

(

"Method

getI ()"

) ;

13

return

i;

14

}

15

16

publi

stati

void

main (String [℄

args )

throws

Ex eption

{

17

Class <?>

t

=

null

;

18

t

=

Class .forName

(

"pl .kiel e .tu .lab10 .TestRTTI

"

) ;

19

//

Stati

init

20

Constru tor

<?>[℄

=

t.getConstru tors

() ;

21

System . out.println

(

"Constru tors

"

);

22

for

(

int

i

=

0;

i

<

 .length ;

i++)

23

System

.out. println (  [i℄);

24

//

Constru tors

25

//

publi

TestRTTI

()

26

27

TestRTTI

instan e

=

( TestRTTI )

[0℄. newInstan e

(( Obje t [℄)

null

);

28

//

Constru tor

TestRTTI

()

29

30

Method [℄

m

=

t.getMethods

();

31

System . out.println

(

"Methods

"

);

32

for

(

int

i

=

0;

i

<

m .length ;

i++)

33

System

.out. println (m [i℄);

34

//

Methods

35

//

publi

stati

void

TestRTTI

.main (java .lang .String [℄)

...

36

//

publi

int

TestRTTI

.getI ()

37

//

publi

final

void

java .lang .Obje t .wait ()

...

38

//

publi

final

void

java .lang .Obje t .wait (long , int)

...

39

//

publi

final

native

void

java .lang .Obje t

.wait (long )

...

40

//

publi

native

int

java .lang .Obje t .hashCode

()

41

//

publi

final

native

java .lang .Class

java. lang .Obje t .getClass

()

42

//

publi

boolean

java .lang .Obje t . equals (java .lang .Obje t

)

43

//

publi

java .lang .String

java .lang .Obje t . toString ()

13

background image

44

//

publi

final

native

void

java .lang .Obje t

.notify ()

45

//

publi

final

native

void

java .lang .Obje t

.notifyAll

()

46

//

Method

getI ()

47

m[1℄. invoke ( instan e ,

(Obje t [℄)

null

);

48

//

Method

getI ()

49

Field [℄

f

=

t.getFields

() ;

50

System . out.println

(

"Fields

"

);

51

for

(

int

i

=

0;

i

<

f .length ;

i++)

52

System

.out. println (f [i℄);

53

//

Fields

54

//

publi

int

TestRTTI

.i

55

f[0℄. set (instan e

,

5678) ;

56

System . out.println

(f[0℄. get (instan e

));

57

//

5678

58

}

59

}

Przykªad

21:

sr /pl/kiel e/tu/lab10/T

estR

TTI.ja

v

a

{link}

7

A

dnota je

A

dnota je

(nazyw

ane

te»

metadan

ymi)

umo»liwia

umiesz zenie

do

datk

o

w

ej

informa ji

w

plik

a

h

¹ró-

dªo

wy

h.

Strategie

za

ho

w

ania

adnota ji

[1

℄:

ˆ

SOUR

CE



"A

dnota je

ze

strategi¡

SOUR

CE

jest

za

ho

wyw

ana

t

ylk

o

w

pliku

k

o

du

¹ró

dªo

w

ego.

Inn

ymi

sªo

wy

,

jest

p

omijana

w

trak

ie

k

ompila ji

k

o

du."

ˆ

CLASS



"A

dnota je

ze

strategi¡

SOUR

CE

jest

za

ho

wyw

ana

w

pliku

. lass

w

trak

ie

k

ompila ji.

Nie

jest

jednak

dostpna

dla

maszyn

y

wirtualnej

w

trak

ie

wyk

onania

program

u."

ˆ

R

UNTIME



"A

dnota je

ze

strategi¡

R

UNTIME

jest

za

ho

wyw

ana

w

pliku

. lass

w

trak

ie

k

ompila ji

i

jest

dostpna

dla

maszyn

y

wirtualnej

w

trak

ie

wyk

onania

program

u."

A

dnota je

mog¡

za

wiera¢

skªado

w

e,

np.

w

przykªado

w

ej

adnota ji

MyA

nnotation

to

id()

i

name()

:

1

Retention

(RetentionPoli y

. RUNTIME )

2

publi

interfa e

MyAnnotation

{

3

int

id() ;

4

5

String

name () ;

6

}

Przykªad

22:

sr /pl/kiel e/tu/lab10/MyAnnotation.ja

v

a

{link}

Ozna zenie

klasy

przy

p

omo

y

adnota ji:

1

MyAnnotation

(id

=

1234,

name

=

"ab d "

)

2

publi

lass

MyAnnotatedClass

{

3

}

Przykªad

23:

sr /pl/kiel e/tu/lab10/MyAnnotatedClass.ja

v

a

{link}

Od zytanie

adnota ji

przy

p

omo

y

reeksji:

1

publi

lass

MyAnnotationRefle tion

{

2

3

stati

Class < MyAnnotatedClass

>

lazz

=

MyAnnotatedClass

.

lass

;

4

5

publi

stati

void

main (String [℄

args )

throws

ClassNotFoundEx eption

{

6

Annotation

[℄

annotations

=

lazz .getAnnotations

() ;

14

background image

7

for

(Annotation

annotation

:

annotations

)

{

8

System

.out. println (

" Class

"

+

lazz

+

"

is

annotated

with

"

9

+

annotation

);

10

MyAnnotation

myA

=

lazz . getAnnotation

(MyAnnotation

.

lass

);

11

if

(myA

!=

null

)

12

System

.out .println (

"name

=

"

+

myA .name ()

13

+

",

id

=

"

+

myA .id() );

14

}

15

}

16

}

Przykªad

24:

sr /pl/kiel e/tu/lab10/MyAnnotationRee tion.ja

v

a

{link}

K

ompila ja

i

uru

homienie

aplik

a ji:

java

pl\ kiel e \tu \lab10 \MyAnnotation

.java

java

pl\ kiel e \tu \lab10 \MyAnnotatedClass

.java

java

pl\ kiel e \tu \lab10 \MyAnnotationRefle tion

.java

java

pl.kiel e

.tu. lab10 .MyAnnotationRefle tion

W

ynik

dziaªania:

Class

lass

pl .kiel e .tu .lab10 .MyAnnotatedClass

is

annotated

with

←֓

pl. kiel e .tu .lab10 .MyAnnotation

(id=1234,

name =ab d )

name

=

ab d ,

id

=

1234

Od zytanie

adnota ji

przy

p

omo

y

pro

esora

adnota ji:

1

publi

lass

MyAnnotationPro essor

extends

Abstra tPro essor

{

2

3

Class <MyAnnotation

>

annotation

=

MyAnnotation

.

lass

;

4

5

Override

6

publi

boolean

pro ess

(Set <?

extends

TypeElement

>

annotations

,

7

RoundEnvironment

roundEnv

)

{

8

9

Messager

messager

=

pro essingEnv

.getMessager

();

10

11

Set <?

extends

Element

>

elements

=

roundEnv

12

. getElementsAnnotatedWith

(annotation

) ;

13

14

for

(Element

element

:

elements

)

{

15

messager

.printMessage

(Kind .NOTE ,

" Class

"

+

element

16

+

"

is

annotated

with

"

+

annotation

) ;

17

MyAnnotation

myA

=

element

.getAnnotation

(MyAnnotation

.

lass

);

18

if

(myA

!=

null

)

19

messager

.printMessage

(Kind .NOTE ,

"name

=

"

+

myA .name ()

20

+

",

id

=

"

+

myA .id() );

21

}

22

return

true

;

23

}

24

25

Override

26

publi

Sour eVersion

getSupportedSour eVersion

()

{

27

return

Sour eVersion

. RELEASE_7

;

28

}

29

30

Override

31

publi

Set <String

>

getSupportedAnnotationTypes

()

{

32

HashSet

<String >

tmp

=

new

HashSet <String

>();

33

tmp .add (annotation

.getName

());

34

return

tmp;

15

background image

35

}

36

37

Override

38

publi

Set <String

>

getSupportedOptions

()

{

39

return

new

HashSet

<String

>();

40

}

41

42

}

Przykªad

25:

sr /pl/kiel e/tu/lab10/MyAnnotationPro

essor

.ja

v

a

{link}

K

ompila ja

i

uru

homienie

aplik

a ji:

java

pl\ kiel e \tu \lab10 \MyAnnotationPro essor

.java

java

-pro essor

pl .kiel e . tu.lab10 . MyAnnotationPro essor

pl \kiel e \ tu\lab10 \MyAnnotatedClass

.java

W

ynik

dziaªania:

Note :

Class

pl .kiel e .tu .lab10 .MyAnnotatedClass

is

annotated

with

interfa e

←֓

pl.kiel e

.tu. lab10 .MyAnnotation

Note :

name

=

ab d,

id

=

1234

8

T

est

y

jednostk

o

w

e

Mo»na

wyró»ni¢

nastpuj¡ e

p

oziom

y

testo

w

ania

oprogramo

w

ania

[9

℄:

ˆ

testo

w

anie

jednostk

o

w

e

"Przedmiotem

testo

w

ania

jednostk

o

w

ego

(unit

testing,

mo

dule

testing)

p

o

dsta

w

o

w

e

jednostki

pro-

gram

u

opisane

w

pro

jek

ie

sz zegóªo

wym.

P

osta¢

t

y

h

jednostek

zale»y

o

d

te

hnologii

implemen

ta ji



mog¡

b

nimi

p

o

dprogram

y

(pro

edury

,

funk

je)

napisane

w

jzyku

strukturaln

ym,

skrypt

y

SQL

alb

o

meto

dy

lub

klasy

zapisane

w

jzyku

obiekto

wym.

Celem

testo

w

ania

na

t

ym

p

oziomie

jest

spra

wdzenie

zgo

dno± i

dziaªania

wszystki

h

opra o

w

an

y

h

jednostek

z

i

h

sp

e yk

a j¡

wynik

a

j¡ a

z

pro

jektu,

oraz

wykry ie

i

usuni ie

jak

na

jwikszej

li zb

y

bªdó

w."

ˆ

testo

w

anie

in

tegra yjne

"P

oª¡ zenie

dw

ó

h

wsp

óªdziaªa

j¡ y

h

jednostek

t

w

orzy

no

w

¡

jednostk

,

w

której

uja

wnia

si

bª-

dy

zwi¡zane

z

niedopaso

w

aniem

me

hanizmó

w

i

h

wsp

óªpra y

.

Przedmiotem

dziaªa«

p

o

dejmo

w

an

y

h

p

o

d zas

testo

w

ania

in

tegra yjnego

(in

terfa e

testing)

jest

ª¡ zenie

jednostek

program

u

w

oraz

wiksze

k

omp

onen

t

y

i

spra

wdzanie

zgo

dno± i

i

h

dziaªania

ze

sp

e yk

a j¡

wynik

a

j¡ ¡

z

pro

jektu

ar

hitektury

oprogramo

w

ania.

Celem

testó

w

jest

spra

wdzenie

funk

jono

w

ania

in

terfejsó

w

(...)."

ˆ

testo

w

anie

systemo

w

e

"Przedmiotem

testo

w

ania

systemo

w

ego

(system

testing)

jest

aªo±¢

oprogramo

w

ania

zin

tegro

w

ana

i

za-

instalo

w

ana

w

o

dp

o

wiednim

±ro

do

wisku

wyk

ona

w

zym.

Celem

testó

w

jest

spra

wdzenie

zgo

dno± i

sp

o-

sobu

dziaªania

wszystki

h

funk

ji

oprogramo

w

ania

ze

sp

e yk

a j¡

oraz

w

eryk

a ja

inn

y

h

wªa± iw

o± i

system

u

okre±lon

y

h

przez

wymagania

niefunk

jonalne."

ˆ

testo

w

anie

ak

epta yjne

"T

esto

w

aniu

ak

epta yjnem

u

(a eptan e

testing)

p

o

dlega

oprogramo

w

anie

stano

wi¡ e

przedmiot

do-

sta

wy

dla

u»ytk

o

wnik

a,

zainstalo

w

ane

w

do

elo

wym

±ro

do

wisku

pra y

lub

w

±ro

do

wisku

imituj¡ ym

do

elo

w

e

±ro

do

wisk

o

pra y

oprogramo

w

ania.

Celem

testó

w

jest

spra

wdzenie

zgo

dno± i

dziaªania

z

wy-

maganiami

i

p

otrzebami

u»ytk

o

wnik

a.

F

orma

testó

w

mo»e

b

p

o

dobna

do

testó

w

systemo

wy

h,

jednak

pro

es

testo

w

ania

nie

jest

zorien

to

w

an

y

na

zna

jdo

w

anie

i

usu

w

anie

defektó

w,

le z

ra zej

na

zademonstro-

w

anie

i

zat

wierdzenie

pro

duktu

przez

u»ytk

o

wnik

a

oraz

ew

en

tualnie

dostro

jenie

do

jego

rze zywist

y

h

p

otrzeb."

St

w

orzenie

testu

jednostk

o

w

ego

dla

klasy

Cal ulator

przy

u»y iu

biblioteki

JUnit

w

±ro

do

wisku

E lipse

przebiega

w

nastpuj¡ y

sp

osób:

File

>

New

>

Other

>

Java



JUnit



JUnit

T

est

Case.

W

nastpuj¡ y

h

p

ola

h

nale»y

wpisa¢:

16

background image

"Class

under

test"



nazw



klasy

,

której

b

dzie

dot

y zyª

test

(np.

pl.kiel

e.tu.lab10.Cal ulator

),

"Pa kage"



nazw



pakietu

(np.

pl.kiel

e.tu.lab10

),

"Name"



nazw



klasy;

zazwy za

j

nazw

a

testu

jednostk

o

w

ego

to

nazw

a

klasy

,

której

dot

y zy

oraz

sªo

w

o

"T

est"

(np.

Cal ulatorT

est

).

P

o

na i±ni iu

"Next"

nale»y

zazna zy¢

meto

dy

,

który

h

b

d¡

dot

y zyªy

test

y

,

zyli

"mul(int,

int)"

i

"div(int,

int)".

W

i±nie ie

"Finish"

p

o

w

o

duje

wygenero

w

anie

klasy

Cal ulatorT

est.

W

k

olejn

ym

kroku

nale»y

dla

meto

d

testMul()

oraz

testDiv()

zast¡

pi¢

aktualne

iaªa

meto

d("fail("Not

yet

implemente

d");"

)

o

dp

o

wied-

nim

k

o

dem.

Uru

homienie

testu

nastpuje

p

oprzez

klikni ie

pra

wy

kla

wiszem

na

k

o

dzie

i

wybranie:

R

un

As

>

JUnit

T

est.

A

dnota je

zwi¡zane

z

JUnit

2

:

ˆ

T

est



sªu»y

do

ozna zania

meto

dy

jak

o

testu

jednostk

o

w

ego,

za

wiera

op

jonalne

skªado

w

e

exp

e

te

d

i

time

out

:



publi

abstr

a t

java.lang.Class<?

extends

java.lang.Thr

owable>

exp

e

te

d

op

jonalna

skªado

w

a

p

o

w

o

duj¡ a,

»e

wyw

oªanie

meto

dy

testo

w

ej

zak

o« zy

si

suk

esem

t

ylk

o

gdy

zgªosi

ona

wyj¡tek,

T

est

(exp

e

te

d

=

Ex

eption. lass)



publi

abstr

a t

long

time

out

op

jonalna

skªado

w

a

p

o

w

o

duj¡ a,

»e

wyw

oªanie

meto

dy

testo

w

ej

zak

o« zy

si

p

ora»k

¡,

je»eli

trw

aªo

ono

dªu»ej

ni»

p

o

dan

y

limit

zasu,

T

est(time

out=100)

ˆ

Before

meto

da

ozna zona

ta

adnota j¡

b

dzie

wyw

oªyw

ana

przed

meto

testo

w

¡,

ˆ

After

meto

da

ozna zona

ta

adnota j¡

b

dzie

wyw

oªyw

ana

p

o

meto

dzie

testo

w

ej,

ˆ

BeforeClass

meto

da

ozna zona

ta

adnota j¡

b

dzie

wyw

oªyw

ana

przed

wyw

oªaniem

pierwszej

meto

dy

testo

w

ej

z

tej

klasy

,

ˆ

AfterClass

meto

da

ozna zona

ta

adnota j¡

b

dzie

wyw

oªyw

ana

p

o

wyw

oªaniu

ostatniej

meto

dy

testo

w

ej

z

tej

klasy

,

ˆ

Ignore

meto

da

ozna zona

ta

adnota j¡

nie

zostanie

wyw

oªana

jak

o

test,

za

wiera

skªado

w

¡

value,

która

sªu»y

do

op

jonalnego

p

o

dania

p

o

w

o

du

dla zego

test

zostaª

zignoro

w

an

y

,



publi

abstr

a t

java.lang.String

value

Klasa

org.junit.Assert

3

za

wiera

zbiór

prze i¡»on

y

h

meto

daser ji

wyk

orzyst

yw

an

y

h

p

o

d zas

pisania

testó

w:

ˆ

assertArra

yEquals()

ˆ

assertEquals()

ˆ

assertF

alse()

ˆ

assertNotNull()

ˆ

assertNotSame()

ˆ

assertNull()

ˆ

assertThat()

2

h

ttp://junit.sour eforge.net/ja

v

ado

/

3

h

ttp://junit.sour eforge.net/ja

v

ado

/org /junit/Assert .h

tml

17

background image

ˆ

assertT

rue()

ˆ

fail()

Klasa

org.junit.Assume

4

za

wiera

zbiór

meto

d

sªu»¡ y

h

dla

wyra»ania

zaªo»e«

o

w

arunk

a

h,

dla

który

h

test

ma

zna zenie

(jest

w

a»n

y).

Je»eli

zaªo»enie

nie

jest

sp

eªnione,

to

nie

zna zy

to,

»e

k

o

d

jest

uszk

o

dzon

y

,

ale

»e

test

nie

dostar za

»adnej

u»yte znej

informa ji.

ˆ

assumeNoEx eption()

ˆ

assumeNotNull()

ˆ

assumeThat()

ˆ

assumeT

rue()

Przykªado

w

a

klasa:

1

pa kage

pl .kiel e . tu.lab10 ;

2

3

publi

lass

Cal ulator

{

4

5

publi

int

mul (

int

x,

int

y){

6

return

x

*

y ;

7

}

8

9

publi

int

div (

int

x,

int

y){

10

return

x

/

y ;

11

}

12

}

Przykªad

26:

sr /pl/kiel e/tu/lab10/Cal ulator.ja

v

a

{link}

Przykªado

w

a

klasa

testuj¡ a:

1

import

org .junit .Test ;

2

3

publi

lass

Cal ulatorTest

{

4

5

final

stati

int

CORRECT_ANSWER

=

4;

6

final

stati

int

NOT_CORRECT_ANSWER

=

1;

7

final

stati

int

EXPECTED_ANSWER

=

CORRECT_ANSWER

;

8

9

final

stati

boolean

THROW_EXCEPTION

=

false

;

10

11

Test (expe ted

=

Arithmeti Ex eption

.

lass

)

12

publi

void

testDiv

()

{

13

Cal ulator

al

=

new

Cal ulator

();

14

al  .div (1,

0);

15

}

16

17

Test

18

publi

void

testMul

()

{

19

Cal ulator

al

=

new

Cal ulator

();

20

assertEquals

(EXPECTED_ANSWER

,

al . mul(2,

2) );

21

if

(THROW_EXCEPTION

)

22

throw

new

RuntimeEx eption

();

23

}

24

25

}

Przykªad

27:

sr /pl/kiel e/tu/lab10/Cal ulator

T

est.ja

v

a

{link}

4

h

ttp://junit.sour eforge.net/ja

v

ado

/org /junit/Assume.h

tml

18

background image

9

Przykªado

w

a

tre±¢

lab

oratorium

Zostanie

p

o

dana

w

p

ó¹niejszym

terminie.

1.

Prosz

st

w

orzy¢

aplik

a j

przedsta

wia

j¡ ¡

wszystkie

sp

osob

y

(9)

obsªugi

wyj¡tk

ó

w

przedsta

wione

w

tej

instruk

ji

lab

oratoryjnej.

2.

Prosz

st

w

orzy¢

aplik

a j

przedsta

wia

j¡ ¡

przykªad

zastoso

w

ania

aser ji.

3.

Prosz

st

w

orzy¢

przykªado

wy

testu

jednostk

o

wy

z

wyk

orzystaniem

biblioteki

JUnit.

Literatura

[1℄

S

hildt

Herb

ert,

Ja

v

a.

K

omp

endium

programist

y

.

W

ydanie

VI

I

I,

Helion,

2012

[2℄

E

k

el

Bru e,

Thinking

in

Ja

v

a,

Edy ja

p

olsk

a,

W

ydanie

IV,

Helion,

2006

[3℄

Horstmann

Ca

y

S.,

Cornell

Gary

,

Ja

v

a.

P

o

dsta

wy

,

W

ydanie

VI

I

I,

Helion,

2008

[4℄

Horstmann

Ca

y

S.,

Cornell

Gary

,

Ja

v

a.

T

e

hniki

zaa

w

anso

w

ane,

W

ydanie

VI

I

I,

Helion,

2009

[5℄

Blo

h

Josh

ua,

Ja

v

a.

Efekt

ywne

programo

w

anie.

W

ydanie

I

I,

Helion,

2009

[6℄

Bra

k

een

Da

vid,

Bark

er

Bret,

V

anhelsu

w

e

Lauren e,

Ja

v

a.

T

w

orzenie

gier,

Helion,

2004

[7℄

Sªo

wnik

terminó

w

z

zakresu

obiekto

w

o± i.

Kazimierz

Subieta,

Ak

ademi

k

a

O yna

W

yda

wni za

PLJ,

W

arsza

w

a

1999

[8℄

Sedgewi

k

Rob

ert,

W

a

yne

Kevin,

Algorytm

y

.

W

ydanie

IV,

Helion,

2012

[9℄

Krzysztof

Sa

ha,

In»ynieria

oprogramo

w

ania,

PWN,

2010

Materiaªy

do

przedmiotu

dostpne

na

strona

h:

h

ttp://a

hilles.tu.kiel e.pl/

h

ttp://w

eaii-

mo

o

dle.tu.kiel e.pl/

19


Document Outline