Commit f19fdff9 by Patryk Czarnik

Klasa Rate i testy

parent ae401679
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>
\ No newline at end of file
package com.example.waluty;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Objects;
public class Rate {
private final String code;
private final String currency;
private final BigDecimal mid;
public Rate(String code, String currency, BigDecimal mid) {
this.code = code;
this.currency = currency;
this.mid = mid;
}
public String getCode() {
return code;
}
public String getCurrency() {
return currency;
}
public BigDecimal getMid() {
return mid;
}
@Override
public String toString() {
return code + " (" + currency + "): " + mid;
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Rate rate = (Rate) o;
return Objects.equals(code, rate.code) && Objects.equals(currency, rate.currency) && Objects.equals(mid, rate.mid);
}
@Override
public int hashCode() {
return Objects.hash(code, currency, mid);
}
public BigDecimal przeliczNaZlote(BigDecimal kwota) {
return kwota.multiply(mid).setScale(2, RoundingMode.HALF_EVEN);
}
public BigDecimal przeliczNaWalute(BigDecimal kwota) {
// w przypadku dzielenie od razu podajemy oczekiwaną precyzję i sposób zaokrąglania
return kwota.divide(mid, 2, RoundingMode.HALF_EVEN);
}
}
package com.example.waluty;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import java.math.BigDecimal;
public class RateTest {
public static final BigDecimal KURS_DOLARA = new BigDecimal("4.0000");
private Rate rate1;
@Before
public void setUp() {
rate1 = new Rate("USD", "dolar", KURS_DOLARA);
}
@Test
public void testGetters() {
assertEquals("USD", rate1.getCode());
assertEquals("dolar", rate1.getCurrency());
assertEquals(KURS_DOLARA, rate1.getMid());
}
@Test
public void testToString() {
assertEquals("USD (dolar): 4.0000", rate1.toString());
}
@Test
public void testPrzeliczNaZlote() {
BigDecimal kwota = new BigDecimal("1000.00");
BigDecimal oczekiwanyWynik = new BigDecimal("4000.00");
BigDecimal wynik = rate1.przeliczNaZlote(kwota);
// sprawdzenie równości "technicznej", uwzględnia także informację o precyzji
assertEquals(oczekiwanyWynik, wynik);
// sprawdzenie róności matematycznej - nie bierze pod uwagę precyzji:
// assert oczekiwanyWynik.compareTo(wynik) == 0;
}
@Test
public void testPrzeliczNaZlote2() {
Rate euro = new Rate("EUR", "euro", new BigDecimal("4.3333"));
BigDecimal kwota = new BigDecimal("2.00");
BigDecimal wynik = euro.przeliczNaZlote(kwota);
BigDecimal oczekiwanyWynik = new BigDecimal("8.67");
assertEquals(oczekiwanyWynik, wynik);
}
@Test
public void testPrzeliczNaWalute() {
BigDecimal kwota = new BigDecimal("4000.00");
BigDecimal wynik = rate1.przeliczNaWalute(kwota);
BigDecimal oczekiwanyWynik = new BigDecimal("1000.00");
assertEquals(oczekiwanyWynik, wynik);
}
@Test
public void testPrzeliczNaWaluteZaokraglanie() {
Rate trzy = new Rate("TRI", "waluta trzy", new BigDecimal("3.0000"));
BigDecimal kwota = new BigDecimal("2000.00");
BigDecimal wynik = trzy.przeliczNaWalute(kwota);
BigDecimal oczekiwanyWynik = new BigDecimal("666.67");
assertEquals(oczekiwanyWynik, wynik);
}
}
\ No newline at end of file
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