《Java Testing with Spock》_3Spock功能

3.1火灾警报软件的例子

1.png
处理单元连接到多个火灾传感器,并连续轮询它们以获取异常读数。发现火灾时,警报声响起。如果火势开始蔓延并且触发了另一个检测器,则会自动呼叫消防队。具体需求如下:

  • 如果所有传感器均报告无异常,则表明系统正常,无需采取任何措施。
  • 如果触发了一个传感器,则会发出警报声(但由于吸烟者粗心大意,无法抗拒香烟,这可能是误报)。
  • 如果触发了多个传感器,则会呼叫消防队(因为火势蔓延到一个以上的房间)。
//实现监视的主类
public class FireEarlyWarning {
   
	private int sensorsDetectingFire = 0;
	
	//方法称为每秒钟由传感器软件
    public void feedData(int triggeredFireSensors)
    {
   
		sensorsDetectingFire = triggeredFireSensors;
    }
    //状态报告获取方法
    public WarningStatus getCurrentStatus() 
    {
   
       return new WarningStatus(sensorsDetectingFire > 0, sensorsDetectingFire > 1);
    }
}
//状态报告内容(状态类)
public class WarningStatus {
   
	private final boolean alarmActive;
	private final boolean fireDepartmentNotified;
	
	public WarningStatus(boolean alarmActive,boolean fireDepartmentNotified)
	{
   
		this.alarmActive = alarmActive;
		this.fireDepartmentNotified = fireDepartmentNotified;
	}
	
    //若为true,警报就会响起。
	public boolean isAlarmActive() {
   
		return alarmActive;
	}
    //若为true,就呼叫消防队。
	public boolean isFireDepartmentNotified() {
   
		return fireDepartmentNotified;
	}
}

3.5 火警系统的全部Spock测试

class FireSensorSpec extends spock.lang.Specification{
   
    //清楚地解释这个测试的作用
    def "如果所有传感器都不活动,那么一切都没问题"() {
   
        
        given: "所有的火灾传感器都关闭了" 
        FireEarlyWarning fireEarlyWarning = new FireEarlyWarning()
        int triggeredSensors = 0
        
        when: "我们询问消防状况" 
        fireEarlyWarning.feedData(triggeredSensors)
        WarningStatus status = fireEarlyWarning.getCurrentStatus()
        
        then: "不应触发警报/通知" 
        !status.alarmActive 
        !status.fireDepartmentNotified
    }

    def "如果一个传感器是启动的,警报应该发出预防措施"() {
    
        given: "只有一个火情传感器是启动的"
        FireEarlyWarning fireEarlyWarning = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值