IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Classe Junit pour tester un Restful qui utilise @FormParam


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Par défaut Classe Junit pour tester un Restful qui utilise @FormParam
    j'ai un RESFUL et je souhaite le tester avec JUNIT et une page HTML en même temps
    Pour la page HTML, je n'ai pas de problème, et quand j'envoi les données depuis JUNIT le RESFUL reçoit toujours la valeur null

    Voici mon Resful

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    @Component
    @Path("/dao")
    public class RestServiceControllerImp implements RestServiceController
    {
        @POST
        @Path("/test/")
        @Consumes({
                    MediaType.APPLICATION_FORM_URLENCODED
                    ,MediaType.MULTIPART_FORM_DATA
                    ,MediaType.TEXT_HTML
                    ,MediaType.TEXT_PLAIN
                    ,MediaType.TEXT_XML
        })  
                public Response getMessage( 
                        @FormParam("dataInput") String dataInput
                       )
        {
            log.info("Message from getProductByID WS");
            log.info("Valeur reçu en entrée :"+ServiceConstants.RETOUR_CHARIOT+dataInput);
            if (dataInput == null)
            {
                result = "your value is null";
            }
            else
            {
                result = "your value :"+dataInput;
            }
     
            return Response.status(201).entity(result).build();
        }
    }
    Voici la page HTML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>test</title>
    </head>
    <body>
        <form action="http://localhost:8080/MyRestful/dao/test" method="POST" >
            <textarea name="dataInput" rows="8" cols="50">
                Hello World
            </textarea> 
            <p>
            <input type ="submit" value="Send"/>
            </p>
        </form>
    </body>
    </html>
    voici le log quand je lance depuis la page HTML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [http-bio-8080-exec-2] INFO com.myresful.rest.controller.RestServiceControllerImp - Message from getProductByID WS
    [http-bio-8080-exec-2] INFO com.myresful.rest.controller.RestServiceControllerImp - Valeur reçu en entrée :
                Hello World
    voici la classe Junit de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext_Test.xml")
    // @ContextConfiguration("classpath:applicationContext.xml")
    @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
    @FixMethodOrder(MethodSorters.NAME_ASCENDING)
    public class TestUnitRest 
    {
        @Autowired
        private BoxControlUnitDao objBoxControlUnitDao;
        private Logger log = LoggerFactory.getLogger(TestUnitRest.class);
        private String userName ;
        private String userPwd ;
        private String urlToConnect ;
        private String responseMsg = "";
        private String dataInput;
        @Test
        public void test01GetMessageFromRestful() throws Exception 
        {
            log.info("*****************************test01GetMessageFromRestful******************");
            userName = "nizar";
            userPwd = "nizar123";
     
     
            log.info("*****************************Génération de l'url******************");
            urlToConnect = "http://localhost:8080/MyRestful/dao/test";
            log.info("Url appelé : "+urlToConnect);
            AutenticateFactory objAutenticateFactory = new AutenticateFactory(urlToConnect, userName, userPwd);
     
            dataInput ="Hello World";
     
            responseMsg = objAutenticateFactory.putMessage(dataInput);
     
            log.info("Réception du retour :"+"\n"+responseMsg);
     
     
            if (responseMsg.startsWith("your value is null")) 
            {
                fail(
                        "L'appel du : "+urlToConnect +" à renvoyé :"+
                        "\n"+
                        responseMsg
                        );
            } 
            else 
            {
                log.info(
                        "Réponse reçu OK" + 
                        "\n"+ 
                        "-----contenu de la réponse------" + 
                        "\n" + 
                        responseMsg+ 
                        "\n" + 
                        "-----fin------"
                        );
            }
        }
    }
    voici le log depuis le Restful quand je lance depuis junit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [http-bio-8080-exec-6] INFO com.MyResful.rest.controller.RestServiceControllerImp - Message from getProductByID WS
    [http-bio-8080-exec-6] INFO com.MyResful.rest.controller.RestServiceControllerImp - Valeur reçu en entrée :
    null
    pour préciser j'utilise une classe d'authentification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    public class AutenticateFactory 
    {
    	static Logger log = LoggerFactory.getLogger(AutenticateFactory.class);
    	String urlToConnect;
    	String userName;
    	String userPwd;
    	String msgResponse;
    	int statusResponse;
        private com.sun.jersey.api.client.WebResource webResource;
        private com.sun.jersey.api.client.Client client;
     
        public AutenticateFactory(String urlToConnect, String userName,String userPwd) 
        {
    		super();
    		this.urlToConnect = urlToConnect;
    		this.userName = userName;
    		this.userPwd = userPwd;
            com.sun.jersey.api.client.config.ClientConfig config = new com.sun.jersey.api.client.config.DefaultClientConfig();
    //        Déclaration du client
            client = com.sun.jersey.api.client.Client.create(config);
            client.addFilter(new LoggingFilter());
            client.addFilter(new com.sun.jersey.api.client.filter.HTTPBasicAuthFilter(userName, userPwd));
    //        Déclaration du web ressource
            webResource = client.resource(urlToConnect);
    	}
     
    	public String getUrlToConnect() {
    		return urlToConnect;
    	}
     
    	public void setUrlToConnect(String urlToConnect) {
    		this.urlToConnect = urlToConnect;
    	}
     
    	public String getUserName() {
    		return userName;
    	}
     
    	public void setUserName(String userName) {
    		this.userName = userName;
    	}
     
    	public String getUserPwd() {
    		return userPwd;
    	}
     
    	public void setUserPwd(String userPwd) {
    		this.userPwd = userPwd;
    	}
     
    	public String getMessage() throws Exception 
        {
    		try
    		{
    			ClientResponse response = webResource.type(javax.ws.rs.core.MediaType.TEXT_HTML).get(ClientResponse.class);
    	    	statusResponse = response.getStatus();
    	    	msgResponse = response.getEntity(String.class);
    //	    	Vérifier le retour de la requete
    	    	if (statusResponse != HttpURLConnection.HTTP_OK)
    	    	{
    	    		throw (new Exception(
    	    							ServiceConstants.HTTP_ERR_CODE+ statusResponse + 
    	    							ServiceConstants.RETOUR_CHARIOT+ msgResponse
    	    							));
    	    	}
    		}
    		catch (Exception err)
    		{
    			msgResponse = ServiceConstants.HTTP_ERR_CODE+ statusResponse + 
    						  ServiceConstants.RETOUR_CHARIOT+ err.getMessage();
     
    		}
    		client.destroy();
        	return msgResponse ;			
        }
     
    	public String putMessage(String inputValue)  throws Exception
        {
    		try
    		{
     
    		    ClientResponse response = webResource.type(javax.ws.rs.core.MediaType.TEXT_HTML).post(ClientResponse.class, inputValue);
    	    	statusResponse = response.getStatus();
    	    	msgResponse = response.getEntity(String.class);
    //	    	Vérifier le retour de la requete
    	    	if (statusResponse != HttpURLConnection.HTTP_CREATED)
    	    	{
    	    		throw (new Exception(
    	    							ServiceConstants.HTTP_ERR_CODE+ statusResponse + 
    	    							ServiceConstants.RETOUR_CHARIOT+ msgResponse
    	    							));
    	    	}
    		}
    		catch (Exception err)
    		{
    			/*msgResponse = ServiceConstants.HTTP_ERR_CODE+ statusResponse + 
    						  ServiceConstants.RETOUR_CHARIOT+ err.getMessage();*/
     
    			msgResponse = err.getMessage();
    		}
        	client.destroy();
        	return msgResponse ;
        }
    }
    pourquoi je reçoi la valeur null quand je lance depuis Junit ?
    comment avoir la même valeur comme depuis la apage HTML ?
    Merci !

  2. #2
    Membre très actif Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Par défaut
    Salut à tous ,
    problème résolu grace à la classe com.sun.jersey.api.representation.Form
    explication
    1/ Dans le test junit je déclare une Form et j'injecte dedans quelques données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String dataInput = "Hello World"
    Form objForm = new Form();
    objForm.add("dataInput", dataInput);
    2/ dans la classe d'authentification j'ai ajouté cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     public String putForm(Form objForm)  throws Exception
        {
            try
            {
     
                ClientResponse response = webResource.type(javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class, objForm);
                statusResponse = response.getStatus();
                msgResponse = response.getEntity(String.class);
    //          Vérifier le retour de la requete
                if (statusResponse != HttpURLConnection.HTTP_CREATED)
                {
                    throw (new Exception(
                                        ServiceConstants.HTTP_ERR_CODE+ statusResponse + 
                                        ServiceConstants.RETOUR_CHARIOT+ msgResponse
                                        ));
                }
            }
            catch (Exception err)
            {
                /*msgResponse = ServiceConstants.HTTP_ERR_CODE+ statusResponse + 
                              ServiceConstants.RETOUR_CHARIOT+ err.getMessage();*/
     
                msgResponse = err.getMessage();
            }
            client.destroy();
            return msgResponse ;
        }
    3/ je retourne dans le test junit et j'ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    responseMsg = objAutenticateFactory.putForm(objForm);
    j'espere que ça peut être utile à tous

    si vous avez des questions n'hésitez pas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/01/2015, 16h29
  2. utilisation class tween pour un clip qui se trouve dans un clip
    Par toffis dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 03/09/2009, 16h07
  3. [CKEditor] Qui utilise FCKeditor sur son site php pour config ?!
    Par guy2004 dans le forum Bibliothèques & Frameworks
    Réponses: 62
    Dernier message: 26/10/2005, 18h24
  4. utilisation du mid pour tester le début d'un champ
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 09/07/2004, 13h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo