2016-06-13 2 views
0

Это мой код для чтения файла csv по строкам для выполнения теста Junit для HTTP-запроса. Но я могу проверить только альтернативные данные, то есть: первые данные считываются, а затем второй пропущен, затем третий читается, четвертый пропущен и т. Д. Из CSV-файла, любезно помогите мне с кодом, если в нем есть какая-либо проблема.CSV Parsing, чтобы прочитать ввод для тестирования Junit по строкам

package testingpack; 

import static org.junit.Assert.*; 


import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 

import com.csvreader.CsvReader; 
import java.io.UnsupportedEncodingException; 

import org.codehaus.jettison.json.JSONException; 
import org.codehaus.jettison.json.JSONObject; 
import org.junit.Test; 


public class testcase { 

@Test 
public void test() throws UnsupportedEncodingException, JSONException { 

    String output = null; 
    String url=""; 
    String testJson; 
    int c=0; 
    try { 
     CsvReader reader = new CsvReader(new FileReader("C:\\Users\\Srijan Rana\\Desktop\\Api.csv"), ','); 


while(reader.readRecord()) 
{ 
    c=c+1; 
    System.out.println("Loop Counter"+c); 
    Boolean br = reader.readRecord(); 

     if (br) { 
      String[] columns = reader.getValues(); 
      url=columns[1]; 
      System.out.println("The URL is \n"+url);  
      testJson=columns[3]; 
      testJson=testJson.replaceAll("~", ","); 

     System.out.print(testJson); 

      if(columns[2].equalsIgnoreCase("POST")) 

       output=(String) CommonUtil.postDataToService(url, testJson); 
       else if(columns[2].equalsIgnoreCase("Get")) 
        output=(String) CommonUtil.getResponseFromService(url); 


       System.out.println("Output is: "+output); 
       JSONObject json = new JSONObject(output); 

       String val = json.getString("mobile_exist"); 

       assertEquals("false",val); 

    } 

} 
    } catch (FileNotFoundException fe) { 
     System.out.println(fe.getMessage()); 

    } catch (IOException ie) { 
     System.out.println(ie.getMessage()); 
} 

} 
} 
+0

Подсказка: правила для хорошего дизайна и чистого кода также применяются для тестового кода. В этом смысле: попытайтесь сделать ** меньше ** одним методом. Это ** тест **, поэтому вы действительно действительно хотите, чтобы он потерпел неудачу, если что-то пошло не так. Таким образом, заявления «распечатать только» catch являются ** контрпродуктивными **! Вместо этого просто выбросьте заявления catch, так что любое исключение сделает JUnit неудачным в конце. Другими словами: даже когда вы исправили эту ** ошибку ** в своем коде; Я вижу дюжину или более «проблем» с этим кодом. Возможно, вы захотите сделать несколько обзоров с более опытными сверстниками, чтобы исправить эти ... – GhostCat

ответ

0

Измените код следующим образом:

boolean br = reader.readRecord(); 
while(br) 
{ 
    ... 
    ... // remove 2nd call of `readRecord` and `if` condition 
    ... 
    ... 
    br = reader.readRecord() // should be last line in while loop 
} 
0

проблема заключается в использовании readRecord дважды. Поэтому в первый раз он будет читать первую строчку и второй раз читать вторую строчку. Это означает, что вы обрабатываете альтернативные линии.

Пример кода

try { 

     CsvReader reader= new CsvReader(file); 

     while (reader.readRecord()) 
     { 
      // logic goes here 
     } 

     reader.close(); 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
0
Boolean br = reader.readRecord(); 
while(br) 
{ 
    br = reader.readRecord(); 
    //code 
} 

Это код, который работал для меня. Спасибо за вашу помощь.

Смежные вопросы