Java IO,输入流和输出流测试

我正在尝试创建一个简单的聊天程序。
最初,我编写了这段代码,根据给定的Command将来自用户的输入消息保存到Text文件中,但是我对测试策略一无所知。 我应该只为runUi()编写测试吗?因为此方法已经包含switch语句,并且在其中调用了其他方法,还是应该为所有其他方法编写?

public class CmdLineUI implements ChatUI,Chat {
    public static final String WRITE = "write";
    public static final String READ = "read";
    public static final String EXIT = "exit";
    public static final String ERRORMESSAGE = "unknown command";

    private final printstream consoleOutput;
    private final BufferedReader userInput;

    public CmdLineUI(printstream os,InputStream is) {
        this.consoleOutput = os;
        this.userInput = new BufferedReader(new InputStreamReader(is));
    }

    public static void main(String[] args) throws Exception {
        printstream os = System.out;
        os.println("***Welcome to The ChatSystem:  input: write for chatting,"
                + "\n    for Reading the messages input: read,for closing Chat input: exit ***");

        CmdLineUI userCmd = new CmdLineUI(os,System.in);

        userCmd.runUi(System.in,os);
    }



    private String[] readCommands() throws Exception {
        String[] result = new String[1];
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String commandLinString = null;
        String command = null;

        try {
            System.out.println("> ");

            commandLinString = br.readLine();
            StringTokenizer st = new StringTokenizer(commandLinString);
            command = st.nextToken().trim();
            // msg = st.nextToken();

            System.out.println("command :" + command);
        } catch (IOException e) {
            System.out.println("Exception when reading from comman line" + e.getLocalizedMessage());
        }
        result[0] = command;
        // result[1] = msg;

        return result;
    }

    @Override
    public void writeMessage(String message) throws Exception {
        System.out.println("Start with Writing mood:");

        try {
            File file = new File("/home/sami/Desktop/file.txt");
            InputStreamReader inputStreamReader = new InputStreamReader(System.in); // A stream for reading from the
                                                                                    // console
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader); // Connect InputStreamReader to a
                                                                                    // BufferedReader
            FileWriter fileReader = new FileWriter(file); // A stream that connects to the text file
            BufferedWriter bufferedWriter = new BufferedWriter(fileReader); // Connect the FileWriter to the
                                                                            // BufferedWriter
            String line;
            boolean continuee = true;

            while (!(line = bufferedReader.readLine()).equals("stop")) {
                continuee = false;
                bufferedWriter.write(line);
            }
            // Close the stream
            bufferedWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    public void readMessage() throws Exception {
        System.out.println("start with reading mood:");

        File file = new File("/home/sami/Desktop/file.txt");
        FileInputStream fileinputstream = new FileInputStream(file);

        try {
            int oneByte;
            while ((oneByte = fileinputstream.read()) != -1) {
                System.out.write(oneByte);
            }

            System.out.flush();
        } catch (Exception ex) {
            ex.getMessage();
        }

        fileinputstream.close();
    }

    @Override
    public void runUi(InputStream inp,OutputStream outp) throws Exception {
        File file = new File("/home/sami/Desktop/file.txt");
        FileReader filereader = new FileReader(file);
        BufferedReader br = new BufferedReader(filereader);

        // CmdLineUI obj = new CmdLineUI(consoleOutput);
        printstream ps = new printstream(outp);
        boolean again = true;

        while (again) {
            String[] commandMsg = readCommands();
            String command = commandMsg[0];

            switch (command) {
            case WRITE:
                writeMessage(br.readLine());
                again = true;
                break;

            case READ:
                readMessage();
                again = true;
                break;

            case EXIT:    
                again = false;
                break;

            default:
                ps.println(ERRORMESSAGE);
            }
        }

    }

}

,我已经创建了这两个界面    这是第一个

public interface ChatUI {
    public void runUi (InputStream inp,OutputStream outp) throws Exception;
}

第二个界面

public interface Chat {
     //First Method 
    public void writeMessage(String message)throws Exception;

    // Second Method
    public void readMessage()throws Exception;
}
feng215 回答:Java IO,输入流和输出流测试

为您的runUi()方法编写测试,因为在所有其他方法中,您都是从控制台读取并标记输入String,写入文件或从文件读取。 Oracle和/或Java语言开发人员已经对所有这3个操作进行了测试(如果您想了解更多,可以在Google上搜索此过程)。

检查程序流是否按预期工作,并为它们编写测试,并且不理会您正在调用的所有函数来调用Java API,然后除了返回(或写入某处)外几乎什么都不做)。

,

我再次使用不同的方式编写了该程序,并且还对方法进行了测试:

import java.io.*;
import java.util.*;

public class CmdLineUI implements ChatUI,Chat {

    public static final String WRITE = "write";
    public static final String READ = "read";
    public static final String EXIT = "exit";
    public static final String ERRORMESSAGE = "unknown command";

    private BufferedReader userInput;

    public static void main(String[] args) throws Exception {
        PrintStream os = System.out;
        os.println("***Welcome to The ChatSystem:  input: write for chatting,"
                + "\n    for Reading the messages input: read,for closing Chat input: exit ***");

        CmdLineUI userCmd = new CmdLineUI();

        userCmd.runUi(System.in,System.out);

    }

    @Override
    public void writeMessage(String message) throws Exception {
        System.out.println("Start with Writing mode:");
        try {
            File file = new File("/home/sami/Desktop/file.txt");
            InputStreamReader inputStreamReader = new InputStreamReader(System.in); // A stream for reading from the
                                                                                    // console
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader); // Connect InputStreamReader to a
                                                                                    // BufferedReader

            FileWriter fileReader = new FileWriter(file); // A stream that connects to the text file
            BufferedWriter bufferedWriter = new BufferedWriter(fileReader); // Connect the FileWriter to the
                                                                            // BufferedWriter

            String line;
            boolean continuee = true;
            while (!(line = bufferedReader.readLine()).equals("stop")) {
                continuee = false;
                bufferedWriter.write(line);
            }

            // Close the stream
            bufferedWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    public void readMessage() throws Exception {
        System.out.println("start with reading mode:");
        File file = new File("/home/sami/Desktop/file.txt");

        BufferedReader br = new BufferedReader(new FileReader(file));
        try {
            String oneByte;
            while ((oneByte = br.readLine()) != null) {
                System.out.println(oneByte);
            }

        }

        catch (Exception ex) {
            ex.getMessage();
        }

    }

    @Override
    public void runUi(InputStream inp,OutputStream outp) throws IOException {
        this.userInput = new BufferedReader(new InputStreamReader(inp));

        BufferedReader br = new BufferedReader(userInput);
        PrintStream ps = new PrintStream(outp);

        CmdLineUI userCmd = new CmdLineUI();

        String commandLinString = null;
        boolean again = true;
        try {
            while (again) {

                System.out.println("> ");
                commandLinString = br.readLine().trim();
                StringTokenizer st = new StringTokenizer(commandLinString);
                String command = st.nextToken();
                // String msg= userCmd.readCommands(command);
                System.out.println("command :" + command);
                switch (command) {

                case WRITE:

                    writeMessage(command);
                    again = true;
                    break;

                case READ:

                    readMessage();

                    again = true;
                    break;
                case EXIT:

                    again = false;
                    break;
                default:
                    ps.println(ERRORMESSAGE);
                }

            }

        } catch (Exception e) {
            System.out.println("Exception when reading from comman line" + e.getLocalizedMessage());

        }

    }

}

这是测试:

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

import junit.framework.Assert;

import java.io.*;

class CmdTesting {



    @Test
    void test() throws Exception {
        try {
            CmdLineUI obj = new CmdLineUI();

            InputStream myInputStream = null;

            String unknownCommandString = "hello world";
            String exitString = CmdLineUI.EXIT;

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(baos);
            dos.writeUTF(unknownCommandString);

            byte[] inputBytes = baos.toByteArray();

            ByteArrayInputStream bais = new ByteArrayInputStream(inputBytes);
            myInputStream = bais;

            ByteArrayOutputStream myOutputStream = new ByteArrayOutputStream();

            obj.runUi(myInputStream,myOutputStream);

            ByteArrayInputStream outputIS = new ByteArrayInputStream(myOutputStream.toByteArray());

            DataInputStream dis = new DataInputStream(outputIS);

            dis.readUTF();

            String expected = "hello world";

            assertEquals(expected,unknownCommandString);

        } catch (Exception ex) {
            ex.getLocalizedMessage();
        }

    }

    @Test
    public void writeMessage() throws Exception {

        File file = new File("/home/sami/Desktop/file.txt");
        String str = "Hello";

        BufferedWriter writer = new BufferedWriter(new FileWriter(file,true));
        writer.append(' ');
        writer.append(str);

        writer.close();
    }


    @Test
    public void reamessage() throws Exception {
        File file=new File("/home/sami/Desktop/file.txt");

        BufferedReader reader = new BufferedReader(new FileReader(file));
        reader.read();
    }
}
本文链接:https://www.f2er.com/3145391.html

大家都在问