Java IO、inputstream和Outputstream测试
我正在尝试创建一个简单的聊天程序。Java IO、inputstream和Outputstream测试,java,testing,io,Java,Testing,Io,我正在尝试创建一个简单的聊天程序。 最初,我编写这段代码是为了将用户的输入消息保存到文本文件中,具体取决于给定的命令,但我对测试策略一无所知。 我应该只为runUi()编写测试吗?因为这个方法已经包含switch语句,并且在它里面调用了其他方法,或者我应该为所有其他方法编写吗 public class CmdLineUI implements ChatUI, Chat { public static final String WRITE = "write"; public sta
最初,我编写这段代码是为了将用户的输入消息保存到文本文件中,具体取决于给定的命令,但我对测试策略一无所知。 我应该只为
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;
}
为您的
runUi()
方法编写测试,因为在所有其他方法中,您要么从控制台读取并标记输入字符串,要么向文件写入,要么从文件读取。所有这3种操作都已经过Oracle和/或Java语言开发人员的测试(如果您想了解更多,可以通过谷歌搜索此过程)
检查您的程序流是否按预期工作,并为它们编写测试,不要为那些只调用come 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();
}
}