Come testare una WebApp in Spring Boot senza main()

di il
29 risposte

Come testare una WebApp in Spring Boot senza main()

Come testo la WebApp seguente di Spring Boot se manca la classe Application.java con il relativo main()?
https://github.com/Apress/beg-spring-boot-2/tree/master/chapter-03
Questo è quello che ottengo:
Immagine.png
Immagine.png

Se non riuscite a vedere bene la foto guardate qui:
https://www.udrop.com/SUl/Immagine.pn
Devo aggiungere io il main() e la relativa classe?
grazie

29 Risposte

  • Re: Come testare una WebApp in Spring Boot senza main()

    Non si capisce niente....
    Sistema il titolo dell'argomento "Come creare e".
  • Re: Come testare una WebApp in Spring Boot senza main()

    giannino1995 ha scritto:


    Come testo la WebApp seguente di Spring Boot se manca la classe Application.java con il relativo main()?
    Quel progetto del chapter 3 non è una applicazione "finita" nel senso che parte e offre pagine o servizi. Semplicemente è una prova dei concetti sui conditional da "provare" tramite unit-testing.
  • Re: Come testare una WebApp in Spring Boot senza main()

    Devo usare la shell, giusto?
    Il libro scrive:
    If you run the application, such as java -jar myapp.jar -DdbType=MYSQL, only the JdbcUserDAO bean
    will be registered. But if you set the system property to -DdbType=MONGODB, the MongoUserDAO bean will be
    registered. This is how you conditionally register a bean based on a system property.
  • Re: Come testare una WebApp in Spring Boot senza main()

    Java -jar myapp.jar -DdbType=MYSQL
    lo sto scrivendo nel posto giusto?
  • Re: Come testare una WebApp in Spring Boot senza main()

    Toki ha scritto:


    Non si capisce niente....
    Sistema il titolo dell'argomento "Come creare e".
    Hai ragione, non so come posso aver scritto quella fesseria. Scusami, ho sistemato tutto.
  • Re: Come testare una WebApp in Spring Boot senza main()

    giannino1995 ha scritto:


    If you run the application, such as java -jar myapp.jar -DdbType=MYSQL, [...]

    giannino1995 ha scritto:


    Java -jar myapp.jar -DdbType=MYSQL
    lo sto scrivendo nel posto giusto?
    No, ti ripeto che quella applicazione NON parte come "standalone", non ha un main().
    La frase che hai citato l'hanno messa sicuramente in senso generale: "se avessi una applicazione che lanci mettendo -DdbType=MYSQL (e avendo i conditional fatti come descritto) allora "attiva" il MySQL".
  • Re: Come testare una WebApp in Spring Boot senza main()

    Nella classe seguente IntelliJ mi ha fatto aggiungere @Qualifier("jdbcUserDAO"):
    /**
     * 
     */
    package com.apress.demo;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import com.apress.demo.AppConfig;
    import com.apress.demo.UserDAO;
    
    import java.util.List;
    
    /**
     * @author Siva
     *
     */
    @RunWith(SpringRunner.class)
    @ContextConfiguration(classes=AppConfig.class)
    public class ConditionalTest
    {
    	@Qualifier("jdbcUserDAO")
    	@Autowired
    	private UserDAO userDAO;
    	
    	@Test
    	public void test_get_all_usernames()
    	{
    		List<String> userNames = userDAO.getAllUserNames();
    		System.err.println(userNames);
    	}
    }
    Anche con questa modifica ottengo sempre lo stesso risultato:
    Microsoft Windows [Versione 10.0.19041.388]
    (c) 2020 Microsoft Corporation. Tutti i diritti sono riservati.

    C:\DATI\IntelliJ\03-conditional\out\artifacts\03_conditional_jar>java -jar 03-conditional.jar -DdbType=MYSQL
    nessun attributo manifest principale in 03-conditional.jar

    C:\DATI\IntelliJ\03-conditional\out\artifacts\03_conditional_jar>
    Come aggiungo il Manifest su IntelliJ?
    Ho già cercato su Internet ma non trovo nulla.
  • Re: Come testare una WebApp in Spring Boot senza main()

    giannino1995 ha scritto:


    Nella classe seguente IntelliJ mi ha fatto aggiungere @Qualifier("jdbcUserDAO"):
    Ma non serve a niente. E vanificherebbe l'applicazione dei conditional applicati nel AppConfig.

    giannino1995 ha scritto:


    C:\DATI\IntelliJ\03-conditional\out\artifacts\03_conditional_jar>java -jar 03-conditional.jar -DdbType=MYSQL
    nessun attributo manifest principale in 03-conditional.jar

    Come aggiungo il Manifest su IntelliJ?
    Ma per fare cosa?? Per metterci il Main-Class? Ma se non c'è un main() .....
  • Re: Come testare una WebApp in Spring Boot senza main()

    Se aggiungo il main con una pagina html di questo tipo:
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8"/>
    <title>Home</title>
    </head>
    <body>
    	<h2>Esplorazione del potere di @Conditional</h2>
    </body>
    </html>
    
    IntelliJ mi costringe a rimuovere delle dipendenze:
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-test</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>jcl-over-slf4j</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-api</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-log4j12</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>log4j</groupId>
    			<artifactId>log4j</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-web</artifactId>
    			<version>5.3.0-M1</version>
    		</dependency>
    Ma se le rimuovo questa classe si riempe di errori:
    /**
     * 
     */
    package com.apress.demo;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import com.apress.demo.AppConfig;
    import com.apress.demo.UserDAO;
    
    import java.util.List;
    
    /**
     * @author Siva
     *
     */
    @RunWith(SpringRunner.class)
    @ContextConfiguration(classes=AppConfig.class)
    public class ConditionalTest
    {
    	@Qualifier("jdbcUserDAO")
    	@Autowired
    	private UserDAO userDAO;
    	
    	@Test
    	public void test_get_all_usernames()
    	{
    		List<String> userNames = userDAO.getAllUserNames();
    		System.err.println(userNames);
    	}
    }
    
  • Re: Come testare una WebApp in Spring Boot senza main()

    giannino1995 ha scritto:


    Se aggiungo il main con una pagina html di questo tipo:
    Ma ti ho già detto che quella del chapter3 NON è una applicazione "finale", che espone/fa qualcosa di concreto.

    E forse non l'hai nemmeno notato dal pom .... NON è una applicazione Spring Boot!!! Non c'è nulla nel pom che faccia riferimento a Spring Boot.
    Perché? ... perché quel capitolo parla dei concetti sui Conditional e questi sono concetti di Spring 4.x base (nemmeno il 5!). Questo è il motivo per cui nel pom "tira" dentro direttamente spring-context e spring-test. E' sufficiente Spring 4.3 per mostrare il concetto.


    Quindi:
    * hai capito i concetti sui conditional (che sono sì importanti come background ma non li si usa sovente)? ----> bene, passa al capitolo successivo
    * non hai capito i concetti sui conditional ----> allora puoi rileggere il capitolo oppure vediamo cosa fare per chiarire i tuoi dubbi
  • Re: Come testare una WebApp in Spring Boot senza main()

    andbin ha scritto:


    giannino1995 ha scritto:


    Nella classe seguente IntelliJ mi ha fatto aggiungere @Qualifier("jdbcUserDAO"):
    Ma non serve a niente. E vanificherebbe l'applicazione dei conditional applicati nel AppConfig.

    giannino1995 ha scritto:


    C:\DATI\IntelliJ\03-conditional\out\artifacts\03_conditional_jar>java -jar 03-conditional.jar -DdbType=MYSQL
    nessun attributo manifest principale in 03-conditional.jar

    Come aggiungo il Manifest su IntelliJ?
    Ma per fare cosa?? Per metterci il Main-Class? Ma se non c'è un main() .....
    Quindi cosa devo fare?
  • Re: Come testare una WebApp in Spring Boot senza main()

    Io faccio così:
    1) Copio chapter-03 dentro la cartella dei progetti di IntelliJ;
    2) Cancello:
    chapter-03\conditional\gradle
    build.gradle
    gradlew
    gradlew.bat
    README.md

    (al momento uso Maven, non Gradle anche se è più potente)
    3) Configuro l'ambiente Tomcat su IntelliJ settando JDK 1.8 ed aggiungo la cartella chapter-03 come richiesto dall'IDE;
    (Uso Tomcat come Build Project e non Spring Boot perché poi IntelliJ scopre che manca il main() e mi blocca tutto)
    4) Vado in terminal e scrivo questo:
    C:\DATI\IntelliJ\chapter-03\conditional>mvn test
    "mvn" non è riconosciuto come comando interno o esterno,
     un programma eseguibile o un file batch.
    come scritto in README.md
    # Beginning SpringBoot 2
    ### Chapter 03 : Being productive with SpringBoot
    **conditional**: This module is a demonstration of how to use Spring's @Conditional annotation.
    Read comments in AppConfig.java to turn on/off various options.
    #### How to run?
    conditional> mvn test
    conditional> mvn test -DdbType=MONGODB
    Avrei bisogno che qualcuno mi spiegasse le fasi operative da fare su IntelliJ per testare l'applicazione perché non so proprio da dove iniziare e dove si vuole arrivare. Ipotizzo che scrivendo qualcosa dal terminale un .jar apposito prodotto dall'IDE il prompt di Windows mi risponda qualcosa ma non ho neppure capito bene questo particolare.
  • Re: Come testare una WebApp in Spring Boot senza main()

    giannino1995 ha scritto:


    C:\DATI\IntelliJ\chapter-03\conditional>mvn test
    "mvn" non è riconosciuto come comando interno o esterno,
     un programma eseguibile o un file batch.
    Sono le solite questioni più "amministrative" del pc. IntelliJ avrà anche un suo Maven "interno" (in questo momento non saprei dire dove/come) ma sicuramente non è "pubblico" sulla macchina (non è in PATH).

    Io personalmente ho sempre l'abitudine di tenermi una installazione di Maven recente a parte, in una locazione che IO conosco e questa la uso da prompt. Vuol dire: scaricarsi lo zip dei binari di Maven, spacchettarlo da qualche parte, impostare la variabile MAVEN_HOME e aggiornare la PATH con la "bin" di Maven. Grosso modo è la stessa cosa che si fa con un JDK o JRE per poterlo usare da prompt.

    Se ti blocchi (già solo) su queste cose non ci siamo ....

    giannino1995 ha scritto:


    Avrei bisogno che qualcuno mi spiegasse le fasi operative da fare su IntelliJ per testare l'applicazione
    Guarda che se hai quel progetto in IntelliJ IDEA, basta che clicchi tasto destro (mouse) sul progetto e fai Run All Tests
    Oppure in modo più specifico, su quella classe ConditionalTest, tasto destro, Run ConditionalTest

    Poi se si vuole passare delle opzioni (es. quel -DdbType=MONGODB) bisogna specificarle nella apposita run configuration
  • Re: Come testare una WebApp in Spring Boot senza main()

    andbin ha scritto:


    giannino1995 ha scritto:


    Se aggiungo il main con una pagina html di questo tipo:
    Ma ti ho già detto che quella del chapter3 NON è una applicazione "finale", che espone/fa qualcosa di concreto.

    E forse non l'hai nemmeno notato dal pom .... NON è una applicazione Spring Boot!!! Non c'è nulla nel pom che faccia riferimento a Spring Boot.
    Perché? ... perché quel capitolo parla dei concetti sui Conditional e questi sono concetti di Spring 4.x base (nemmeno il 5!). Questo è il motivo per cui nel pom "tira" dentro direttamente spring-context e spring-test. E' sufficiente Spring 4.3 per mostrare il concetto.


    Quindi:
    * hai capito i concetti sui conditional (che sono sì importanti come background ma non li si usa sovente)? ----> bene, passa al capitolo successivo
    * non hai capito i concetti sui conditional ----> allora puoi rileggere il capitolo oppure vediamo cosa fare per chiarire i tuoi dubbi
    Ok grazie per il supporto. Si ho capito @Conditional ma avrei preferito un'applicazione concreta capace di mostrare il funzionamento nell'annotazione.
    Per capire se ho compreso nel dettaglio la classe @Conditional potrei modificare lo script nr. 1 del libro. Potrei sostituire i profili con le condizioni e precisamente potrei dire a Spring Boot di verificare la presenta di MySQL sul mio notebook. Nel caso il DBMS fosse assente potrei dire a Spring Boot di avviare H2.
Devi accedere o registrarti per scrivere nel forum
29 risposte