Errore compilando codice con enum durante il run di test automatici con Selenium WebDriver

di il
3 risposte

Errore compilando codice con enum durante il run di test automatici con Selenium WebDriver

Salve,

runnando il mio codice in IntelliJ ottengo il seguente errore:
java.lang.NullPointerException: Name is null

	at java.base/java.lang.Enum.valueOf(Enum.java:264)
Premetto che si tratta di un package di test automatici scritti in Java che utilizzano il framework Spring per automatizzare la GUI di una Web Application... Sapreste come aiutarmi?

Grazie,
Fabio

3 Risposte

  • Re: Errore compilando codice con enum durante il run di test automatici con Selenium WebDriver

    La documentazione della classe Enum dice che il metodo statico valueOf() può sollevare una NPE se uno dei suoi due parametri è null.
    Questa è la firma del metodo:
    
    public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
    
    Il metodo vuole due parametri: un oggetto Class che rappresenta la Enum di cui ottenere la costante ed il nome della costante della Enum. Se uno di questi è null, il metodo solleva la NPE. Andando a spulciare i sorgenti della classe Enum del core Java si scopre che il messaggio dell'eccezione sollevata, in questo caso, è proprio "Name is null".

    Dove tu faccia uso di questo metodo nelle tue classi e come tu lo stia usando, non lo sappiamo. Nello stack-trace dell'eccezione dovresti avere il riferimento preciso alla riga di codice della tua classe, che ha sollevato l'eccezione.

    Ciao.
  • Re: Errore compilando codice con enum durante il run di test automatici con Selenium WebDriver

    Grazie mille per l'esaustiva risposta.
    Essendo alle prime armi con la programmazione in generale e con Java in particolare, questo mi porta a una seconda domanda.
    Nel mio codice la classe Enum viene utilizzata in molteplici punti.
    Non capisco come mai, ad esempio, solo il secondo metodo solleva l'eccezione, mentre il primo (a cui mi sono ispirato per scrivere il secondo) non solleva eccezioni, pur avendo una forma molto simile:
        public LoyaltyCurrency getLoyaltyCurrency(final Tenant tenant) {
            return LoyaltyCurrency.valueOf(environment.getProperty("test.data." + tenant.name() + ".loyalty_currency"));
        }
    
        public MinimumSpendCurrency getMinimumSpendCurrency(final Tenant tenant) {
            return MinimumSpendCurrency.valueOf(environment.getProperty("test.data." + tenant.name() + ".minimum_spend_currency"));
        }
  • Re: Errore compilando codice con enum durante il run di test automatici con Selenium WebDriver

    fabio83 ha scritto:


        public LoyaltyCurrency getLoyaltyCurrency(final Tenant tenant) {
            return LoyaltyCurrency.valueOf(environment.getProperty("test.data." + tenant.name() + ".loyalty_currency"));
        }
    
        public MinimumSpendCurrency getMinimumSpendCurrency(final Tenant tenant) {
            return MinimumSpendCurrency.valueOf(environment.getProperty("test.data." + tenant.name() + ".minimum_spend_currency"));
        }
    Ma non è questione della enum in sé ...
    Il valueOf(String) delle enum PUÒ lanciare:
    - NullPointerException se il name passato è null
    - IllegalArgumentException se il name passato non è esattamente scritto come una delle costanti (della enum)

    Quindi visto che prendi una "property" (non so cosa è environment come tipo, presumo un java.util.Properties), se dà null, stringa vuota o un valore "pippo" che non corrisponde in una di quelle due enum .... beh, il problema è quello.

    Ma il problema è il valore della property (o come è composto il nome della property) ..... non le enum LoyaltyCurrency/MinimumSpendCurrency in sé.
Devi accedere o registrarti per scrivere nel forum
3 risposte