Test Unitaire Java Connexion HttpClient [Résolu/Fermé]

Signaler
-
 lanulle28 -
Bonjour,
Je développe un projet java Android.
je dois faire des tests unitaires (avec JUnit ) pour une classe qui lance une requête sur un serveur .
Le problème c'est que je ne sais pas quoi tester , juste l' arrayList de retour ? J'aimerai bien tester l'algo de la méthode doInBackGround() en lui même.
Je ne sais pas comment faire :/
Voici la classe qui lance la requete .

public class HttpAction extends AsyncTask<HttpSentObject, Void, ArrayList<Object>>
{

private HttpSentObject sentObject;
private ArrayList<Object> liste;

public HttpAction(Context context){
setmContext(context);
}

@Override
protected ArrayList<Object> doInBackground(HttpSentObject... params)
{
this.sentObject=params[0];
this.liste = new ArrayList<Object>();
BufferedReader inBuffer =null;
HttpRequestBase request = null;

try {


//Création du client http
HttpClient httpClient = new DefaultHttpClient();

if(this.sentObject.getType().equals("post")){
//HttpPost request = new HttpPost(this.sentObject.getUrl());
request= new HttpPost(this.sentObject.getUrl());

}
else if (this.sentObject.getType().equals("put")){
request = new HttpPut(this.sentObject.getUrl());

}else if (this.sentObject.getType().equals("get")){
request = new HttpGet(this.sentObject.getUrl());

}

//Formation de l'URL et intégration des paramètres à poster
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(this.sentObject.getInputs_params());

if(this.sentObject.getType().equals("post"))
((HttpPost) request).setEntity(formEntity);
else if (this.sentObject.getType().equals("put"))
((HttpPut) request).setEntity(formEntity);


HttpResponse httpResponse = httpClient.execute(request);
inBuffer = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));


//Conversion de la reponse : stream to string
StringBuffer stringBuffer = new StringBuffer("");
String line = "";
String newLine = System.getProperty("line.separator");
while ((line = inBuffer.readLine()) != null) {
stringBuffer.append(line + newLine);
}
inBuffer.close();
this.sentObject.setStatutResponse(httpResponse.getStatusLine().getStatusCode());
//Conversion de string to JSON


JSONObject jsonObjRecv = new JSONObject(stringBuffer.toString());
for(String s : this.sentObject.getOutput_params()){
this.liste.add(jsonObjRecv.get(s).toString());
}



} catch(Exception e) {
e.getMessage();
} finally {
if (inBuffer != null) {
try {
inBuffer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


return this.liste;
}

protected void onPostExecute(ArrayList<Object> liste)
{
}
}



2 réponses

Messages postés
15934
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 juillet 2020
2 629
Bonsoir,

Tester l'algorithme de la méthode en entier ce n'est pas un test unitaire, c'est un test fonctionnel.
Pour faire des tests unitaires il faudrait déjà que ton code soit décomposé en unités.

Par exemple dans ton code tu as ce morceau là :

JSONObject jsonObjRecv = new JSONObject(stringBuffer.toString());	
for(String s : this.sentObject.getOutput_params()){
    this.liste.add(jsonObjRecv.get(s).toString());
}

Pour tester ce morceau, il faudrait que ce soit dans une méthode.

Exemple :

public static List<Object> parseJson(String json, String...htmlParams)
{
    if (json==null || htmlParams==null)
        return null;

    List<Object> list = new ArrayList<Object>(htmlParams.length);
    JSONObject jsonObj = new JSONObject(json);

    for (String param : htmlParams)
        liste.add(String.valueOf(jsonObj.get(s)));

    return list;
}

Dans ce cas tu peux faire des tests unitaires sur quelques valeurs.

public void testParseJson()
{
    assertNull(parseJson(null,null));
    assertNull(parseJson("",null));
    assertNull(parseJson(null,""));

    String json = "exemple de json"
    String[] htmlParams = {"exemple", "de", "paramètres", "html"};
    List<Object> list = parseJson(json, htmlParams);

    assertEquals(htmlParams.length, list.size());
    ...
}

Donc à faire : découper ton code en méthodes, qui auront chacun leur rôle (une seule méthode fourre tout n'est pas testable) et tester chacune de ces méthodes avec tous les cas de figure possibles.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60144 internautes nous ont dit merci ce mois-ci

Ok je vois mieux maintenant merci de m'avoir éclairé.