问题:
在Java的单元测试中,针对需要控制台输入或需要向控制台输出的函数,如何做到测试自动化?
解决:重定向输入流、输出流
1. 测试含有控制台输入的函数
利用jdk自带的:System.setIn(InputStream in):重新分配“标准”输入流,相当于不是从控制台获取数据,而是从该流中获取数据。而对于字符串可以先转为字节数组,然后转成流,ByteArrayInputStream(byte buf[])继承自InputStream,可以作为System.setIn()方法的参数。
被测函数:
单测脚本:
2. 测试含有控制台输出的函数
被测函数:
单侧脚本:
replaceAll("\r\n",""):去除字符串的回车换行符,因为System.out.println() 自动在字符串末尾加入了换行
如果是调用了System.out.print()函数的话:outContent.toString() 即可。
测试类和单测脚本的完整代码
SystemTest.java
package character;
import java.util.Scanner;
/**
* @author 1111
*/
public class SystemTest {
public SystemTest(){
};
/**
* 需要控制台输入的函数
*/
public int getInput(){
int result;
Scanner scanner =