Test Unitaire Java Connexion HttpClient

Résolu/Fermé
lanulle28 - 16 avril 2014 à 18:01
 lanulle28 - 17 avril 2014 à 08:49
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)
{
}
}



A voir également:

2 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
16 avril 2014 à 20:23
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
Ok je vois mieux maintenant merci de m'avoir éclairé.
0