Ищу совет, как проверить правильность ярлыка валюты

#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 из каждой валюты в другую.