Результат Outputstream должен быть сопоставим со списком - PullRequest
1 голос
/ 20 июня 2020

Мне нужно закодировать метод, который позволяет мне ввести список строк, передать их объекту OutputStream и вернуть его, и он должен быть сопоставим с помощью теста JUnit.

Мой метод:

     public void gebeAus(OutputStream out, StringListe zeilen) {
    
    byte[] bytesArr;
    
    try {
    for(int i = 0; i < zeilen.size(); i++) {
        bytesArr = zeilen.get(i).getBytes();
        
        out.write(bytesArr);
        out.write('\n');
    }   
        out.flush();
        out.close();
    }
    catch (IOException e) {
        e.getStackTrace();
    }
 }

Часть теста JUnit, которую я записал в тестовый класс:

import java.io.ByteArrayOutputStream;
import java.util.Arrays;

public class SortTest {
    
    private static String[] strings = { "Das", "ist", "ein", "Test", "zum", "Sortieren", "von", "Strings" };
    
public static void main(String[] args) {
    DateiSortierer ds = new DateiSortierer();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    String[] test = {"asfas", "aws", "jzrfjc", "dfhfds", "asfewfg", "wertgwertw"};
    StringListe l = new StringListe();
    l.addAll(Arrays.asList(test));
    ds.gebeAus(baos, l);
    System.out.println(l);
    System.out.println(baos);
}

}

Вывод списка: [asfas, aws, jzrfj c, dfhfds, asfewfg , wertgwertw], а вывод моего OutputStream - asfas aws jzrfjc dfhfds asfewfg wertgwertw

Здесь тест Junit завершился неудачно.

DateiSortierer:

    import java.io.*;
import java.util.*;
 
public class DateiSortierer {

    
    
    
    public StringListe einlesen(String dateiname) throws DateiNichtGefundenAusnahme, IOException   {
        
        StringListe liste1 = new StringListe();
        
        File file = new File(dateiname);
        BufferedReader br;
        try {
            br = new BufferedReader(new FileReader(file));
        } catch (FileNotFoundException e) {
            throw new DateiNichtGefundenAusnahme(dateiname);
        }
        
        try {
                String line = br.readLine();
                
                while (line != null) {
                    liste1.add(line);
                    line = br.readLine();
                }
            }
            finally {
                br.close();
            }
            return liste1;
    }
    
    public StringListe sortiere(StringListe unsortierteListe) 
            throws IllegalArgumentException {
        
        if(unsortierteListe == null) {
            throw new IllegalArgumentException("null ist ein ungueltiges Argument.");
        }
        
        try {
            Collections.sort(unsortierteListe);
        }
        catch (IllegalArgumentException e) {
            
        }
        return unsortierteListe;
    }
    
     public void gebeAus(OutputStream out, StringListe zeilen) {
        
        byte[] bytesArr;
        
        try {
        for(int i = 0; i < zeilen.size(); i++) {
            bytesArr = zeilen.get(i).getBytes();
            
            out.write(bytesArr);
            out.write('\n');
        }   
            out.flush();
            out.close();
        }
        catch (IOException e) {
            e.getStackTrace();
        }
     }
         
    
    public void sortiereDatei(String dateiname) {
        DateiSortierer listen = new DateiSortierer();
        listen.einlesen(dateiname);
        listen.sortiere(listen);
        listen.gebeAus(out, zeilen);
    }
    
}

StringListe :

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * eine Liste die Zeichenketten enthaelt
 * @author schreier
 *
 */
public class StringListe extends LinkedList<String> {

    /**
     * erzeugt eine neue leere Liste
     */
    public StringListe() {
        List<String> liste = new ArrayList<String>();
    }
    
}

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Насколько я могу судить, добавление следующей строки в ваш код должно решить вашу проблему:

String decodedBaos = new String(baos.toByteArray(), StandardCharsets.UTF_8);

Вы можете сравнить decodedBaos с l. Как я уже сказал, я предлагаю вам использовать для этого метод assertLinesEqual().

0 голосов
/ 20 июня 2020

При использовании out.write пропустил out.write ('\ r'). Включая его, тест в порядке.

...