Come posso eseguire un test logico per garantire che MY CUSTOM ERROR venga lanciato al posto di NumberFormatException? [chiuso]

-2

Sto lavorando a qualcosa che dovrebbe essere abbastanza semplice. Ho il 95% del mio programma in funzione, ma un pezzo non soddisfa ancora il requisito. (FYI, questo è per un compito a casa, ma proverò di aver fatto un buon lavoro prima di venire qui.)

Il pezzo del compito: * La classe ProductionWorker deve generare un'eccezione chiamata InvalidPayRate quando riceve un numero negativo per la tariffa oraria o se i dati inseriti non sono numerici.

Ho la mia logica InvalidPayRate per la cattura di numeri negativi, ma non sono sicuro di come garantire che l'input sia numerico. Ecco il codice rilevante:

InvalidPayRate.java

public class InvalidPayRate extends Exception {
    public InvalidPayRate(){
        super("Error: Invalid Pay Rate.");
    }
}

ProductionWorker.java

void setHourlyPayRate(double rate) throws InvalidPayRate
    {
        if (rate < 0.0){
            throw new InvalidPayRate();
        }

        this.hourlyPayRate = rate;
    }

test.java (questo è all'interno di una funzione principale)

//Set Rate details
try{
    worker.setHourlyPayRate(-15.00);
    System.out.println(worker.getHourlyPayRate() + ": Valid HourlyRate");  
} catch (InvalidPayRate e) {
    System.out.println(e.getMessage());
}

try{
    worker.setHourlyPayRate(20.00);
    System.out.println(worker.getHourlyPayRate() + ": Valid HourlyRate");  
} catch (InvalidPayRate e) {
    System.out.println(e.getMessage());
}

String testRate = "1v2.65";
try{
    double rate = Double.parseDouble(testRate);
    worker.setHourlyPayRate(rate);
    System.out.println(worker.getHourlyPayRate() + ": Valid HourlyRate");  
} catch (InvalidPayRate e) {
    System.out.println(e.getMessage());
}

Al momento, 2 dei 3 test funzionano ... la voce Valid, la voce numero negativo (restituisce il mio errore personalizzato) ma la mia voce non numerica non funziona ... dà l'errore standard NumberFormatException.

Come posso eseguire un test logico per garantire che MY CUSTOM ERROR venga lanciato al posto di NumberFormatException?

    
posta Wes 07.07.2014 - 22:40
fonte

1 risposta

1

L'errore viene generato da Double.parseDouble , in altre parole al di fuori del tuo codice, dal momento in cui setHourlyPayRate viene chiamato, sai che è un doppio valido. La conversione da stringa a doppia è non il tuo problema ™.

Se vuoi veramente lanciare la tua eccezione personalizzata, devi avvolgere la conversione in un try catch e rilanciare l'eccezione personalizzata:

String testRate = "1v2.65";
try{
    double rate;
    try{
        rate = Double.parseDouble(testRate);    
    } catch (NumberFormatException e) {
        throw new InvalidPayRate();
    }
    worker.setHourlyPayRate(rate);
    System.out.println(worker.getHourlyPayRate() + ": Valid HourlyRate");  
} catch (InvalidPayRate e) {
    System.out.println(e.getMessage());
}

C'è un input che non ti protegge e che è Double.NaN che puoi testare con Double.isNan .

if (Double.isNaN(rate) || rate < 0.0){
    throw new InvalidPayRate();
}
    
risposta data 07.07.2014 - 23:01
fonte

Leggi altre domande sui tag