gpt4 book ai didi

java - OutputStream 的 JUnit 测试

转载 作者:行者123 更新时间:2023-12-01 21:56:36 25 4
gpt4 key购买 nike

我正在尝试为 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);
}

}


}

最佳答案

我认为你开始遇到的问题是因为你如何组织你的类(class)。所有方法都是静态的,并且每个方法的依赖项(例如您正在使用的各种输入和输出流)都是根据需要在每个方法内创建的。例如,在您的 messageToFile(...) 方法中:


OutputStream os = new FileOutputStream(filename, true);

更好的项目方法是使用传统的面向对象类设计来设计类,该类设计使用名为 Dependency Injection 的模式。

这里的想法是,实现 ChatI 接口(interface)的类将使用输入和输出流以及其他对象的成员变量,这些对象将在类的构造函数中初始化。然后,您可以控制,最重要的是,从单元测试中访问这些流 - 可能像这样:

    @Test
public void givenAMessageString_When() {
String expectedInput="expectedString";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ChatIntImplement chat = new ChatIntImplement(baos);
...
chat.writeMessage(expectedInput);
string output = new String(baos.toByteArray());
assertThat(output).equals(expectedInput);
}

关于java - OutputStream 的 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58739650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com