Commit 30b7cf0d by Patryk Czarnik

przykłady testów AssertJ

parent 4f270606
......@@ -17,5 +17,11 @@
<version>5.9.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.22.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
package waluty.model;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class Tabela {
private final String numer;
private final LocalDate data;
private final List<Waluta> waluty = new ArrayList<>();
public Tabela(String numer, LocalDate data) {
this.numer = numer;
this.data = data;
}
public String getNumer() {
return numer;
}
public LocalDate getData() {
return data;
}
public List<Waluta> getWaluty() {
return waluty;
}
@Override
public String toString() {
return "Tabela nr " + numer + " z dnia " + data + ", " + waluty.size() + " walut";
}
public void dodajWalute(Waluta waluta) {
this.waluty.add(waluta);
}
public Waluta wyszukaj(String kod) {
for(Waluta waluta : waluty) {
if(waluta.getKod().equals(kod)) {
return waluta;
}
}
return null;
}
public String[] getKodyWalut() {
return this.waluty.stream()
.map(Waluta::getKod)
.sorted()
.toArray(String[]::new);
}
}
package waluty.model;
import java.math.BigDecimal;
import java.math.RoundingMode;
// Ta klasa jest "niemutowalna" (immutable), tzn. raz utworzony obiekt tej klasy nie może zmienić stanu.
// O takich klasach mówi się też "value object". Przykłady znanych klas: String, Integer, BigDecimal, LocalDate
public class Waluta {
private final String kod;
private final String nazwa;
private final BigDecimal kurs;
public Waluta(String kod, String nazwa, BigDecimal kurs) {
this.kod = kod;
this.nazwa = nazwa;
this.kurs = kurs;
}
public String getKod() {
return kod;
}
public String getNazwa() {
return nazwa;
}
public BigDecimal getKurs() {
return kurs;
}
@Override
public String toString() {
return kod + " (" + nazwa + "): " + kurs;
}
public BigDecimal przeliczNaZlote(BigDecimal kwotaWWalucie) {
// po pomnożeniu zaokrąglamy do 2 miejsc po przecinku
return kwotaWWalucie.multiply(kurs).setScale(2, RoundingMode.HALF_UP);
}
public BigDecimal przeliczNaWalute(BigDecimal kwotaWZlotych) {
// zaokrąglanie robi się od razu podczas dzielenia
return kwotaWZlotych.divide(kurs, 2, RoundingMode.HALF_UP);
}
}
package waluty.model;
import static org.assertj.core.api.Assertions.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class TabelaTest {
private static final String PRZYKLADOWY_NUMER = "123/A/NBP/2022";
private static final LocalDate PRZYKLADOWA_DATA = LocalDate.of(2022, 9, 30);
private Tabela tabela;
@BeforeEach
void setUp() {
tabela = new Tabela(PRZYKLADOWY_NUMER, PRZYKLADOWA_DATA);
}
@Test
void testTabela() {
assertThat(tabela.getNumer()).isEqualTo(PRZYKLADOWY_NUMER);
assertThat(tabela.getData()).isEqualTo(PRZYKLADOWA_DATA);
assertThat(tabela.getWaluty()).isEmpty();
}
@Test
void testToString() {
assertThat(tabela).asString().isEqualTo("Tabela nr 123/A/NBP/2022 z dnia 2022-09-30, 0 walut");
}
@Test
void testDodajWalute() {
Waluta dolar = new Waluta("USD", "dolar", new BigDecimal("5.0000"));
Waluta euro = new Waluta("EUR", "euro", new BigDecimal("3.0000"));
tabela.dodajWalute(dolar);
tabela.dodajWalute(euro);
assertThat(tabela.getWaluty())
.hasSize(2)
.containsExactlyInAnyOrder(dolar, euro);
}
@Test
void testWyszukaj() {
Waluta dolar = new Waluta("USD", "dolar", new BigDecimal("5.0000"));
Waluta euro = new Waluta("EUR", "euro", new BigDecimal("3.0000"));
tabela.dodajWalute(dolar);
tabela.dodajWalute(euro);
Waluta znaleziona = tabela.wyszukaj("EUR");
assertThat(znaleziona).isEqualTo(euro);
}
}
package waluty.model;
// import static org.junit.jupiter.api.Assertions.*;
import static org.assertj.core.api.Assertions.*;
import java.math.BigDecimal;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class WalutaTest {
private Waluta dolar;
private Waluta euro;
private Waluta peso;
@BeforeEach
void setUp() {
dolar = new Waluta("USD", "dolar", new BigDecimal("5.0000"));
euro = new Waluta("EUR", "euro", new BigDecimal("3.0000"));
peso = new Waluta("MXN", "peso", new BigDecimal("0.3333"));
}
@Test
void testWaluta() {
// asercje w stylu JUnit:
// assertEquals("USD", dolar.getKod());
// asersje w stylu AssertJ:
assertThat(dolar.getKod()).isEqualTo("USD");
// tylko prezentacja ciekawych asercji (akurat tutaj dla String)
assertThat(dolar.getKod())
.isNotNull()
.hasSize(3)
.isUpperCase()
.startsWith("U")
.endsWith("D");
}
@Test
void testToString() {
// assertEquals("USD (dolar): 5.0000", dolar.toString());
assertThat(dolar.toString()).isEqualTo("USD (dolar): 5.0000");
assertThat(euro.toString()).isEqualTo("EUR (euro): 3.0000");
}
@Test
void testPrzeliczNaZlote() {
BigDecimal sto = new BigDecimal("100.00");
BigDecimal wynik = dolar.przeliczNaZlote(sto);
assertThat(wynik).isEqualTo("500.00");
}
@Test
void testPrzeliczNaZloteZaokr() {
BigDecimal dwa = new BigDecimal("2.00");
BigDecimal wynik = peso.przeliczNaZlote(dwa);
assertThat(wynik).isEqualTo("0.67");
}
@Test
void testPrzeliczNaWalute() {
BigDecimal piescset = new BigDecimal("500.00");
BigDecimal wynik = dolar.przeliczNaWalute(piescset);
assertThat(wynik).isEqualTo("100.00");
}
@Test
void testPrzeliczNaWaluteZaokr() {
BigDecimal tysiac = new BigDecimal("2000.00");
BigDecimal wynik = euro.przeliczNaWalute(tysiac);
assertThat(wynik).isEqualTo("666.67");
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment