2015-02-09 5 views
0

Я хочу использовать класс Parameterized Junit для чтения из CSV-файла. Я хочу: -Параметрированный класс runner с 2 аргументами в конструкторе

  1. Почитаю «placeID» (строка) и добавить его к базовому URL, чтобы сформировать на веб-страницу
  2. утверждающие, что название Place «имя» (строка), как я ожидаю, чтобы это было за место

вкладка разделителями файл .csv содержит 2 записи следующего образа (будет иметь 100 записи в конечном счете):

132 
The Big House 

настоящее время я получаю недопустимое исключение аргумента. Каков способ достижения этого? Я предполагаю, что иметь относительный URL-адрес, а затем проверить данные в отдельных файлах будет лучше.

Мой код:

@RunWith(Parameterized.class) 
public class PlaceTest { 

public static WebDriver driver; 
private String placeId; 
private String name; 
private PropertyPage propertyPage; 

public PlaceTest(String page, String name) { 
    this.placeId = page; 
    this.name = name; 
} 

@Parameterized.Parameters 
public static Collection data() { 
    return csvFileAsCollectionOfStringArrays(
      System.getProperty("user.dir") + 
        "/src/test/resources/" + 
        "place_ids.csv"); 
} 

private static Collection<String[]> csvFileAsCollectionOfStringArrays(String csvFileName) { 

    List<String[]> csvRows = new ArrayList<String[]>(); 
    String rawCSVRow; 
    BufferedReader csvFileReader = null; 
    String delimiter = "\t"; 

    System.out.println("Reading data from " + csvFileName); 

    try { 
     csvFileReader = new BufferedReader(new FileReader(csvFileName)); 

    } catch (FileNotFoundException e) { 
     System.out.println("Could not find file " + csvFileName); 
     e.printStackTrace(); 
    } 

    int rowNumber = 1; 
    try { 

     if (csvFileReader != null) { 
      while ((rawCSVRow = csvFileReader.readLine()) != null) { 
       String delimitedItems[] = rawCSVRow.split(delimiter); 
       csvRows.add(delimitedItems); 
       rowNumber++; 
      } 
     } 


    } catch (IOException e) { 
     System.out.println("Error reading row number " + rowNumber); 
     e.printStackTrace(); 
    } 

    try { 
     assert csvFileReader != null; 
     csvFileReader.close(); 
    } catch (IOException e) { 
     System.out.println("Error closing file " + e.getMessage()); 
     e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
    } 

    return csvRows; 

} 

@BeforeClass 
public static void startDriver() { 
    driver = Driver.get(); 
} 

@Before 
public void getNextPage() { 
    propertyPage = new PropertyPage(driver); 
    driver.get(TestWebApp.getURL() + this.placeId); 
} 

@Test 
public void checkNamePresent() { 
    WebElement placeName = propertyPage.checkName(); 
    assertEquals("Expected match on name", this.name, placeName.getText()); 
} 

@AfterClass 
public static void quitDriver() { 
    driver.quit(); 

    } 
} 

ответ

0

Попробуйте это:

import static org.junit.Assert.assertEquals; 

import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.Collection; 
import java.util.List; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 

import au.com.bytecode.opencsv.CSVReader; 

@RunWith(Parameterized.class) 
public class PlaceTest { 

    private String placeId; 
    private String name; 

    public PlaceTest(String page, String name) { 
     this.placeId = page; 
     this.name = name; 
    } 

    @Parameterized.Parameters 
    public static Collection<String[]> data() { 
     CSVReader reader = new CSVReader(new InputStreamReader(PlaceTest.class.getResourceAsStream("place_ids.csv"))); 
     List<String[]> lines; 
     try { 
      lines = reader.readAll(); 
      return lines; 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return new ArrayList<String[]>(); 
    } 


    @Test 
    public void checkNamePresent() { 
     System.out.println(this.placeId + " " + this.name); 
    } 
} 

place_ids.csv должен быть: \src\test\resources\<your package>\place_ids.csv

Update ваша пом с CSVReader зависимостью:

<dependency> 
     <groupId>net.sf.opencsv</groupId> 
     <artifactId>opencsv</artifactId> 
     <version>2.3</version> 
    </dependency> 

Update:

CSV файл:

132, Some text 
133, Other text 

Ваш пример выше, имеет одно слово в каждой строке. Приведенный выше код был скомпилирован и протестирован.

+0

спасибо. Я пробовал это, но все еще получаю: java.lang.IllegalArgumentException: неправильное количество аргументов – Steerpike

+0

возможно, ваш CSV ошибочен – azbarcea