首页 > 解决方案 > Outputstream 的结果需要与列表具有可比性

问题描述

我需要编写一个允许我输入字符串列表的方法,将它们提供给 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);
}

}

list 的输出是 [asfas, aws, jzrfjc, 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);
    }
    
}

字符串列表:

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>();
    }
    
}

标签: javajunitoutputstream

解决方案


对于我可以收集的内容,将以下行添加到您的代码中应该可以解决您的问题:

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

您可以decodedBaosl. 正如我评论的那样,我建议您使用该方法assertLinesEqual()


推荐阅读