java从文本读取数据和向文本写入数据;(例:软件测试,通过驱动程序从文本读取数据进行单元测试并输出测试结果到文本)

Java从文本读取数据:

BufferedReader in=new BufferedReader(
			new InputStreamReader(//Stream(流)与Reader之间的桥梁
					new FileInputStream("要读取的文件路径")));//只能处理字节流;文件路径可以是相对路径和绝对路径

或者
BufferedReader in = new BufferedReader(new FileReader("文件路径"));

上面的新建的 BufferedReader 对象 in 可以通过如下代码读取文本的数据显示到控制台:

String line;
while((line=in.readLine())!=null){//readLine()方法是从文本中读取一行,并指向下一行
	System.out.println(line);
}

向文本中写入数据:

PrintWriter out=new PrintWriter(
		new BufferedWriter(//一个缓冲
			new OutputStreamWriter(
				new FileOutputStream("要写入的文件路径"))));

上面 PrintWriter 对象可以通过以下方法向文本写入内容

  • format(“格式”,…);
  • printf(“格式”,…);
  • print(各种基本类型);
  • println(各种基本类型);
下面是学习软件测试时一个驱动设计的例子,实现自动从文本中读取数据进行测试,并将测试结果写入另一个文本中。

问题描述:
根据不同的消费金额,给予不同的折扣优惠,具体折扣优惠规则如下:
(1)当账单一次消费金额为负数或者为零时,返回负数表示消费无效。
(2)当账单一次消费金额在800到1800元之间时(不含800,但包含1800元),折扣为9折。
(3)当账单一次消费金额在1800到4800(含)之间时,为8折。
(4)当账单一次消费金额在4800以上时,一律为7折。

实现以上功能的类Discount:

public class Discount {
	
	public double calculateDiscount(double amount){
		if(amount<=0) return -1;
		if(amount>800 && amount<=1800) return amount*0.9;
		if(amount>1800 && amount<=4800) return amount*0.8;
		if(amount>4800) return amount*0.7;
		return amount;
	}
}

给出的测试用例文本DiscountData.txt:

1 400.0 400.0
2 1300.0 1170.0
3 3300.0 2640.0
4 8000.0 5600.0
5 0.0 -1.0
6 1.0 1.0
7 799.0 799.0
8 800.0 800.0
9 801.0 720.9
10 1799.0 1619.1
11 1800.0 1620.0
12 1801.0 1440.8
13 4799.0 3839.20
14 4800.0 3840.0
15 4801.0 3360.7
16 -1.0 -1.0
17 -10.0 -1.0

设计的驱动程序DriverDiscount:

import java.io.*;
public class DriverDiscount {

	public static void main(String[] args) {
		Discount discount=new Discount();
		int passNum=0;
		int failNum=0;
		try{
			//创建读对象
			BufferedReader in=new BufferedReader(
					new InputStreamReader(
							new FileInputStream("src/DiscountData.txt")));
			
			//创建写对象
			PrintWriter out=new PrintWriter(
					new BufferedWriter(//一个缓冲
						new OutputStreamWriter(
							new FileOutputStream("src/testResult.txt"))));
			
				String linetxt=null;
				int row=0;
				out.println("*******这是通过DiscountData.txt测试数据对Discount类的测试结果*******");
				while((linetxt=in.readLine())!=null){
					row++;
					//将读到的每一行数据以空格为分隔符划分成字符串数组(编号 输入数据 预期输出)
					String data[]=linetxt.split(" ");
					
					double input=Double.parseDouble(data[1]);
					double expectedOut=Double.parseDouble(data[2]);
					double actualOut=discount.calculateDiscount(input);
					if(Math.abs(actualOut-expectedOut)<1e-6){
						//只要实际输出与预期输出在1e-6误差范围内,则测试通过
						passNum++;
						out.println("测试用例"+row+": pass");
					}else{
						failNum++;
						out.println("测试用例"+row+": fail");
					}
				}
				out.println("共执行"+row+"个测试用例,其中"+passNum+"个通过,"+failNum+"个失败");
				in.close();
				out.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}
 

得到的执行结果文本testResult.txt:

*******这是通过DiscountData.txt测试数据对Discount类的测试结果*******
测试用例1: pass
测试用例2: pass
测试用例3: pass
测试用例4: pass
测试用例5: pass
测试用例6: pass
测试用例7: pass
测试用例8: pass
测试用例9: pass
测试用例10: pass
测试用例11: pass
测试用例12: pass
测试用例13: pass
测试用例14: pass
测试用例15: pass
测试用例16: pass
测试用例17: pass
共执行17个测试用例,其中17个通过,0个失败

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值