#java #testing
#java #тестирование
Вопрос:
Я пишу программу, которая преобразует значения каждой валюты в другую, используя простой API. У меня не было никаких проблем с разработкой этой простой программы, но в настоящее время я испытываю трудности с ее тестированием. Я программист 3 месяца, поэтому не вините меня за качество кода — дайте мне советы на будущее.
Я уже написал тест, который проверяет правильность конвертации из каждой валюты в другую, теперь я ищу способ проверить, является ли ярлык валюты (например. EUR, PLN, JPY, AUD ..) является правильным, я имею в виду, что тест должен предоставлять мне информацию, когда имя (AUR или JPU) неверно. Я получил класс «Rates», который содержит значения свойств JSON каждой валюты.
package pl.sda.CurrencyConverter_RZ.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Rates {
@JsonProperty("BGN")
private Double BGN;
@JsonProperty("NZD")
private Double NZD;
@JsonProperty("ILS")
private Double ILS;
@JsonProperty("RUB")
private Double RUB;
@JsonProperty("CAD")
private Double CAD;
@JsonProperty("USD")
private Double USD;
@JsonProperty("PHP")
private Double PHP;
@JsonProperty("CHF")
private Double CHF;
@JsonProperty("AUD")
private Double AUD;
@JsonProperty("JPY")
private Double JPY;
@JsonProperty("TRY")
private Double TRY;
@JsonProperty("HKD")
private Double HKD;
@JsonProperty("MYR")
private Double MYR;
@JsonProperty("HRK")
private Double HRK;
@JsonProperty("CZK")
private Double CZK;
@JsonProperty("IDR")
private Double IDR;
@JsonProperty("DKK")
private Double DKK;
@JsonProperty("NOK")
private Double NOK;
@JsonProperty("HUF")
private Double HUF;
@JsonProperty("GBP")
private Double GBP;
@JsonProperty("MXN")
private Double MXN;
@JsonProperty("THB")
private Double THB;
@JsonProperty("ISK")
private Double ISK;
@JsonProperty("ZAR")
private Double ZAR;
@JsonProperty("BRL")
private Double BRL;
@JsonProperty("SGD")
private Double SGD;
@JsonProperty("PLN")
private Double PLN;
@JsonProperty("INR")
private Double INR;
@JsonProperty("KRW")
private Double KRW;
@JsonProperty("RON")
private Double RON;
@JsonProperty("CNY")
private Double CNY;
@JsonProperty("SEK")
private Double SEK;
@JsonProperty("EUR")
private Double EUR;
}
package pl.sda.CurrencyConverter_RZ.service;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import pl.sda.CurrencyConverter_RZ.model.Currencies;
import java.math.BigDecimal;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;
class CurrencyServiceTest {
public static Currencies currencyValue = new Currencies();
public static CurrencyService currencyService = new CurrencyService();
@BeforeAll
static void setUp() {
}
@Test
@DisplayName("If conversion is correct by multiplying values")
void shouldReturnTrueByMultiplying() {
BigDecimal fromPLNtoEUR = currencyService
.convertCurrencyValue(1, "PLN", "EUR", "2019-04-20", 4);
BigDecimal fromEURtoPLN = currencyService
.convertCurrencyValue(1, "EUR", "PLN", "2019-04-20", 4);
assertAll(() -> assertThat((fromPLNtoEUR.multiply(fromEURtoPLN)).setScale(0, BigDecimal.ROUND_HALF_DOWN))
.isEqualTo(BigDecimal.valueOf(1)),
() -> assertThat((fromEURtoPLN.multiply(fromPLNtoEUR)).setScale(0, BigDecimal.ROUND_HALF_DOWN))
.isEqualTo(BigDecimal.valueOf(1)));
}
// @ParameterizedTest // <- to check if its needed
// @CsvSource({"AUD", "JPY"})
@DisplayName("Tests if shortcut of currency is correct")
void shouldReturnTrueIfCurrencyShortcutIsCorrect(String currencyShortcut, String correctCurrencyShortcut) {
//TODO
}
}
Теперь мне интересно, могу ли я каким-то образом получить эти имена из класса (только имена, а не значения из JSON), вместо того, чтобы тестировать их один за другим. Надеюсь, что кто-нибудь поймет, что я пытаюсь сказать. Также, если кто-то не против дать мне советы, как улучшить мой 1-й тест, было бы здорово. Он возвращает значение BigDecimal из каждой валюты в другую.