2013-03-22 8 views
2
@Parameters 
public static Collection data() throws IOException {  
    ArrayList<String> lines = new ArrayList(); 

    URL url = PokerhandTestCase.class.getClassLoader().getResource("test/TestFile.txt"); 
    File testFile = new File(url.getFile()); 
    FileReader fileReader = new FileReader(testFile); 
    bufReader = new BufferedReader(fileReader); 
    assertFalse("Failed to load the test file.", testFile == null); 

    boolean isEOF = false; 
    while (!isEOF){ 

     String aline = bufReader.readLine(); 

     if (aline == null){ 
      System.out.println("Done processing."); 
      isEOF = true; 
     } 

     lines.add(aline); 
    } 

    return Arrays.asList(lines); 

} 

Последняя строка программы вызывает крушение, я хотел бы знать, как правильно определить коллекцию из массива. Эта функция требуется для коллекции как возвращаемого типа.Как создать управляемый данными класс JUnit

ответ

3

Заменить последнюю строку с этим:

return (Collection)lines; 

С ArrayList реализует интерфейс Collection: http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

Так общий код:

public static Collection data() throws IOException 
    { 
    ArrayList<String> lines = new ArrayList(); 
    // populate lines collection... 
    return (Collection)lines; 
    } 

Основываясь на комментариях ниже, возможно, это будет квалифицирована как «Сборник массивов»:

public static Collection data() throws IOException 
    { 
    ArrayList<String> array1 = new ArrayList(); 
    ArrayList<String> array2 = new ArrayList(); 
    ArrayList<String> array3 = new ArrayList(); 
    // populate lines collection... 
    ArrayList<ArrayList<String>> lines = new ArrayList(); 
    lines.add(array1); 
    lines.add(array2); 
    lines.add(array3); 
    return (Collection)lines; 
    } 
+0

Компилятор жалуется, что эта функция должна возвращать коллекцию массивов. – shorttermmem

+0

@ Альфред Я так не думаю. Возможно, у вас есть опечатка в вашем коде. Его компилируемый код. Предоставьте ошибку компилятора plz. – user1697575

+0

Sry, я не имею в виду, что это ошибка компиляции. Однако структура JUnit определяет, что эта функция должна возвращать коллекции массивов. Я хотел бы спроектировать класс тестирования Junit, основанный на данных, поэтому я создал текстовый файл и хотел бы читать строки за строкой, а затем возвращать его как массив строк. но он хочет коллекцию массивов, поэтому я думаю, может быть, я должен позволить каждому массиву содержать один объект, который является строкой. Большое спасибо – shorttermmem

0

ArrayList lines = new ArrayList(); ... return Arrays.asList (линии);

этот обратный двухмерный массив.

Эта функция требуется для коллекции в качестве типа возврата.

Я думаю, что ответ пользователя1697575 верен.

+0

java.lang.Exception: src.PokerhandTestCase.data() должен возвращать коллекцию массивов. Я пробовал предыдущие ответы, но JUnit не принимает ArrayList из ArrayLists. он только принимает тип Object [] [] atype = новый Object [] [] { {1}, {2}, {3} } Я хотел бы определить ArrayList, так что я мог собрать строки, Я читал из файла testfile.txt. вышеуказанное объявление статически определено. – shorttermmem

0

Ваша коллекция, которую вы возвращаете, должна быть Collection<Object[]>. Вы возвращаете коллекцию. Вам нужно сделать что-то вроде этого (для полного примера):

@RunWith(Parameterized.class) 
public class MyTest { 
    @Parameters 
    public static Collection<Object[]> data() throws IOException { 
     List<Object[]> lines = new ArrayList<>(); 

     File testFile = new File("/temp/TestFile.txt"); 
     FileReader fileReader = new FileReader(testFile); 
     BufferedReader bufReader = new BufferedReader(fileReader); 
     Assert.assertFalse("Failed to load the test file.", testFile == null); 

     boolean isEOF = false; 
     while (!isEOF) { 
      String aline = bufReader.readLine(); 

      if (aline == null) { 
       System.out.println("Done processing."); 
       isEOF = true; 
      } 

      lines.add(new Object[] { aline }); 
     } 

     return lines; 
    } 

    private final String file; 

    public MyTest(String file) { 
     this.file = file; 
    } 

    @Test 
    public void test() { 
     System.out.println("file=" + file); 
    } 

} 

Обратите внимание, что вы не закрывая файлы здесь, и вы добавляете бесполезное нулевое значение в конце списка, но я скопировал ваш код :-).