【发布时间】:2019-11-06 22:58:14
【问题描述】:
我正在尝试为 writeMessage() 方法编写测试。但我不知道如何开始,因为我需要测试一个 OutputStream。这应该是一个小聊天。它应该从控制台读取消息,将其写入文本文件,然后打印已写入文件的所有消息。
这是一个大学项目。
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
public class ChatIntImplement implements ChatI {
public static String readMessage() throws IOException, NullPointerException{
InputStream is = System.in;
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String message = null;
try {
message = br.readLine();
}catch(IOException ex) {
System.err.println("couldn't write data (fatal)");
System.exit(0);
}
return message;
}
public static void messageToFile(String message) throws IOException {
try {
String filename = "savedMessage.txt";
OutputStream os = new FileOutputStream(filename, true);
PrintStream ps = new PrintStream(os);
ps.println(message);
}catch (FileNotFoundException ex) {
System.err.println("couldn't open file - fatal");
System.exit(0);
}
}
public static void showMessages() {
InputStream is = null;
try {
is = new FileInputStream("savedMessage.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String message;
while((message = br.readLine())!= null) {
System.out.println(message);
}
}catch(FileNotFoundException ex) {
System.err.println("couln't open file -fatal");
System.exit(0);
}catch(IOException e) {
System.err.println("couldn't read data (fatal)");
System.exit(0);
}
}
@Override
public void writeMessage(String message){
try {
messageToFile(message);
showMessages();
}catch (IOException e) {
System.err.println("couldn't write data (fatal");
System.exit(0);
}
}
@Override
public void exit() {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
ChatIntImplement chat = new ChatIntImplement();
try {
String message = readMessage();
chat.writeMessage(message);
}catch (IOException e) {
System.err.println("couldn't write data (fatal");
System.exit(0);
}catch (NullPointerException npe) {
System.err.println("Du hast nichts eingegeben");
System.exit(0);
}
}
}
【问题讨论】:
-
你想测试什么?请记住,您不应该测试 Java API,它已经过测试,因此您不是在测试
FileOutputStream是否有效,那么您想要/需要测试的究竟是什么?如果要编写带有单元测试的代码,则需要以“单元”编写代码,以便可以测试“单元”。您要在这里测试什么“单元”功能? -
仅供参考:
messageToFile方法未能通过视觉测试,因为我们可以看到它不能正常工作,因为它没有不要关闭FileOutputStream。但是,我们不需要单元测试来告诉我们这一点,因为任何好的 IDE 在我们编写代码时都会警告我们这一点。 -
@FailingCoder “你必须先创建一个文件才能输出。” 嗯?
new FileOutputStream(filename, true)创建文件,用于输出。您不必先创建文件。 -
问题是,我什至应该在实现方法之前编写测试。(我们教授的要求。)所以方法是否正常工作并不重要,我只需要编写一个测试它。我想测试方法 writemessage()。想象一下,我们没有实现。它应该像一个黑盒测试。该方法应该获取一个字符串并将其写入 .txt 文件,然后在控制台中显示所有消息。
标签: java unit-testing testing junit outputstream