Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
2
20230403
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
20230403
Commits
c624c4f5
Commit
c624c4f5
authored
Apr 03, 2023
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Testy wyjątków
parent
8f7b8a32
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
106 additions
and
4 deletions
+106
-4
BrakSrodkow.java
PC21-Watki/src/konto/BrakSrodkow.java
+11
-0
Konto.java
PC21-Watki/src/konto/Konto.java
+12
-3
KontoTest.java
PC21-Watki/src/konto/KontoTest.java
+83
-1
No files found.
PC21-Watki/src/konto/BrakSrodkow.java
0 → 100644
View file @
c624c4f5
package
konto
;
public
class
BrakSrodkow
extends
Exception
{
public
BrakSrodkow
()
{
super
();
}
public
BrakSrodkow
(
String
message
)
{
super
(
message
);
}
}
PC21-Watki/src/konto/Konto.java
View file @
c624c4f5
...
...
@@ -33,10 +33,19 @@ public class Konto {
}
public
void
wplata
(
int
kwota
)
{
if
(
kwota
<=
0
)
{
throw
new
IllegalArgumentException
(
"Niedodatnia kwota w metodzie wplata"
);
}
saldo
+=
kwota
;
}
public
void
wyplata
(
int
kwota
)
{
saldo
-=
kwota
;
public
void
wyplata
(
int
kwota
)
throws
BrakSrodkow
{
if
(
kwota
<=
0
)
{
throw
new
IllegalArgumentException
(
"Niedodatnia kwota w metodzie wyplata"
);
}
if
(
kwota
>
saldo
)
{
throw
new
BrakSrodkow
(
"Brak środków na koncie nr "
+
numer
);
}
this
.
saldo
-=
kwota
;
}
}
PC21-Watki/src/konto/KontoTest.java
View file @
c624c4f5
...
...
@@ -17,6 +17,13 @@ class KontoTest {
}
@Test
void
testKonstruktorIGettery
()
{
assertEquals
(
123
,
konto
.
getNumer
());
assertEquals
(
"Ala Kowalska"
,
konto
.
getWlasciciel
());
assertEquals
(
1000
,
konto
.
getSaldo
());
}
@Test
void
testToString
()
{
assertEquals
(
"Konto nr 123, wł. Ala Kowalska, saldo 1000"
,
konto
.
toString
());
}
...
...
@@ -28,9 +35,84 @@ class KontoTest {
}
@Test
void
testWyplata
()
{
void
testWyplata
()
throws
BrakSrodkow
{
konto
.
wyplata
(
200
);
assertEquals
(
800
,
konto
.
getSaldo
());
}
// Temat sprawdzania wyjątków w testach.
// Aby stwierdzić, że w pewnej sytuacji metoda POWINNA skończyć się wyjątkiem,
// możemy użyć odpowiednio try-catch (testWplataTry)
// albo użyć dedykowanych rozwiązań JUnit - dalsze przykłady
@Test
void
testWplataUjemna_Try
()
{
try
{
konto
.
wplata
(-
100
);
// Gdyby nie było wyjątku i program doszedłby do tego miejsca,
// test powinien skończyć się porażką
fail
(
"Powinien być wyjątek, a nie ma."
);
}
catch
(
IllegalArgumentException
e
)
{
// Jeśli wyłapiemy wyjątek, możemy sprawdzić w teście jego szczegóły,
// np. jaki jest message (bardzo rzadko takie rzeczy sprawdza się w testach, ale można):
assertEquals
(
"Niedodatnia kwota w metodzie wplata"
,
e
.
getMessage
());
}
finally
{
// Możemy też upewnić się, że w przypadku wystąpienia wyjątku stan konta się nie zmienił.
assertEquals
(
1000
,
konto
.
getSaldo
());
}
}
/* JUnit 4 pozwalał pisać tak. Było to proste w zapisie, ale mało precyzyjne w weryfikacji,
* bo tylko sprawdzał sam fakt wystapienia wyjątku, ale nie jego szczegóły.
@Test(expected=IllegalArgumentException.class)
void testWplataUjemna_v0() {
konto.wplata(-100);
}
*/
// Analogiczny test można też napisać wykorzystując nową funkcjonalność JUnit 5:
@Test
void
testWplataUjemna_v1
()
{
// assertThrows wykonuje podany fragment kodu (w praktyce podaje się wyrażenie lambda)
// i sprawdza czy ten kończy się podanym rodzajem wyjątku.
// Jeśli jest wyjątek - dobrze
// Jeśli nie ma wyjątku - test failuje
assertThrows
(
IllegalArgumentException
.
class
,
()
->
{
konto
.
wplata
(-
100
);
});
// Dodatkowo po wykonaniu assertThrows możemy sprawdzić jaki jest stan końcowy,
// np. czy saldo się nie zmieniło.
assertEquals
(
1000
,
konto
.
getSaldo
());
}
// Aby sprawdzić jaki jest message w wyjątku itp, możemy odebrać obiekt wyjątku i sprawdzić bezpośrednio
@Test
void
testWplataUjemna_v2
()
{
IllegalArgumentException
exception
=
assertThrows
(
IllegalArgumentException
.
class
,
()
->
{
konto
.
wplata
(-
100
);
});
assertEquals
(
"Niedodatnia kwota w metodzie wplata"
,
exception
.
getMessage
());
assertEquals
(
1000
,
konto
.
getSaldo
());
}
@Test
void
testWyplataUjemna
()
{
assertThrows
(
IllegalArgumentException
.
class
,
()
->
{
konto
.
wyplata
(-
100
);
});
assertEquals
(
1000
,
konto
.
getSaldo
());
}
@Test
void
testBrakSrodkow
()
{
assertThrows
(
BrakSrodkow
.
class
,
()
->
{
konto
.
wyplata
(
1300
);
});
assertEquals
(
1000
,
konto
.
getSaldo
());
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment