黑盒测试(实践)

2023-10-31

黑盒测试(实践)

三角形问题

有一个程序,接收三个整数输入a、b和c,分别表示三角形的三条边。a、b和c的取值范围都为[1,100]。程序根据输入的三条边判断三角形的类型:等边三角形、等腰三角形、普通三角形和不构成三角形。如果输入的a、b和c不在有效范围,程序会输出一条消息来说明问题,如:边a不在有效范围内。

解题:不同的变量进行边界值分析(对一个变量进行分析时另外两个变量为稳定且安全变量)

输入 输入 输入 输出
a b c
0 50 50 边a不在有效范围内
1 50 50 等腰三角形
2 50 50 等腰三角形
99 50 50 等腰三角形
100 50 50 不构成三角形
101 50 50 边a不在有效范围内
50 0 50 边b不在有效范围内
50 1 50 等腰三角形
50 2 50 等腰三角形
50 99 50 等腰三角形
50 100 50 不构成三角形
50 101 50 边b不在有效范围内
50 50 0 边c不在有效范围内
50 50 1 等腰三角形
50 50 2 等腰三角形
50 50 99 等腰三角形
50 50 100 不构成三角形
50 50 101 边c不在有效范围内
50 50 50 等边三角形

【计算题】

佣金问题

:某公司生产机器人及部件,机器人包含3大部件:主控模块、通信模块及执行模块。该公司的代理商负责销售机器人整机和部件;公司要求每个代理商每月最少销售一整套机器人(即三类部件至少各销售一个);受限于公司产能,公司每个月最多给每个代理商提供80个主控模块、90个通信模块以及100个执行模块。每个主控模块售价90元、每个通信模块售价60元、每个执行模块售价50元。到6月末的时候,公司会根据代理商的销售情况计算佣金。

佣金计算方法如下:

没有销售额在1000元以下(含)的部分,佣金为10%;

超过1000元但不超过2400元(含)的部分,佣金为15%;

超过2400的部分,佣金为20%。

佣金计算函数:

import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            int x = scanner.nextInt();
            double m =0;
            if(x<=1000){
                m = x*0.1;
            }else if(x<=2400){
                m = (x-1000)*0.15+100;
            }else{
                m = (x-2400)*0.2+310;
            }
            System.out.println(m);
        }
    }
}
主控模块 通信模块 执行模块
最多 80 90 100
价格 90 60 50
  1. 边界分析

按照边界取值方法

模块 正常取值 边界值选取
主控模块 [1,80] {0,1,2,40,79,80,81}
通信模块 [1,90] {-1,0,1,45,89,90,91}
执行模块 [1,100] {-1,0,1,50,99,100,101}

输入进行考虑

测试用例 主控模块 通信模块 执行模块 总销售额 预期输出
test01 0 45 50 5200 主控模块输入非法
test02 1 45 50 5290 佣金:888
test03 2 45 50 5380 佣金:906
test04 79 45 50 12310 佣金:2292
test05 80 45 50 12400 佣金:2310
test06 81 45 50 12490 主控模块输入非法
test07 40 0 50 6100 通信模块输入非法
test08 40 1 50 6160 佣金:1062
test09 40 2 50 6220 佣金:1074
test10 40 89 50 11440 佣金:2118
test11 40 90 50 11500 佣金:2130
test12 40 91 50 11560 通信模块输入非法
test13 40 45 0 6300 执行模块输入非法
test14 40 45 1 6350 佣金:1100
test15 40 45 2 6400 佣金:1110
test16 40 45 99 11250 佣金:2080
test17 40 45 100 11300 佣金:2090
test18 40 45 101 11350 执行模块输入非法
test19 40 45 50 8800 佣金:1590
  1. 次边界分析

从输出角度对改程序进行测试,因为代理商每月最低售出主控模块1块、通信模块1块、执行模块1块.其销售额为200,佣金为20元.

最多售出主控模块80块、通信模块90块、执行模块100块,其销售额为17600元,佣金为3350元.

销售额等价类划分为[200,1000],(1000,2400],(2400,17600]

按照此等价类分别取边界值为

{

略小于200,200,略大于200,

略小于1000,1000,略大于1000,

略小于2400,2400,略大于2400,

略小于17600,17600,略大约17600

}

测试用例 主控模块 通信模块 执行模块 总销售额 预期输出
test01 1 1 0 150 执行模块输入非法
test02 1 1 1 200 佣金:20
test03 1 1 2 250 佣金:25
test04 5 5 4 950 佣金:95
test05 5 5 5 1000 佣金:100
test06 5 5 6 1050 佣金:107.5
test07 12 12 11 2350 佣金:302.5
test08 12 12 12 2400 佣金:310
test09 12 12 13 2450 佣金:320
test10 80 90 99 17550 佣金:3340
test11 80 90 100 17600 佣金:3350
test12 80 90 101 17650 执行模块输入非法

酒水佣金问题

某酒水销售公司指派销售员销售各种酒水,其中白酒卖168元/瓶,红酒卖120元/瓶,啤酒卖5元/瓶。对于每个销售员,白酒每月的最高供应量为5000瓶,红酒为3000瓶,啤酒为30000瓶,各销售员每月至少需售出白酒50瓶,红酒30瓶,啤酒300瓶。奖金计算方法如下:

销售额2万元以下(含)的为4%;

销售额2万元(不含)到4.5万元(含)的为1%;

销售额4.5万元以上(不含)的为0.5%。

(请运用边界值法设计测试用例)

边界值分析

  1. 确定边界
白酒 红酒 啤酒
最少 50 30 300
最多 5000 3000 30000
售价 168 120 5

2)确定边界值

白酒{49,50,51,2525,4999,5000,5001}

红酒{29,30,31,1515,2999,3000,3001}

啤酒{299,300,301,15150,29999,30000,30001}

测试用例 白酒 红酒 啤酒 销售额 预期输出
test01 49 1515 15150 265782 白酒值输入非法
test02 50 1515 15150 265950 佣金4404.75
test03 51 1515 15150 266118 佣金4405.59
test04 4999 1515 15150 1097382 佣金8561.91
test05 5000 1515 15150 1097550 佣金8562.75
test06 5001 1515 15150 1097718 白酒值输入非法
test07 2525 29 15150 503430 红酒值输入非法
test08 2525 30 15150 503550 佣金5592.75
test09 2525 31 15150 503670 佣金5593.35
test10 2525 2999 15150 859830 佣金7374.15
test11 2525 3000 15150 859950 佣金7374.75
test12 2525 3001 15150 860070 红酒值输入非法
test13 2525 1515 299 607495 啤酒值输入非法
test14 2525 1515 300 607500 佣金6112.5
test15 2525 1515 301 607505 佣金6112.525
test16 2525 1515 29999 755995 佣金6854.975
test17 2525 1515 30000 756000 佣金6855
test18 2525 1515 30001 756005 啤酒值输入非法
test19 2525 1515 15150 681750 佣金6483.75

考虑次边界

通过输出考虑

销售额可选取边界{1.35,2,4.5,135}

因此按照等价类可选取边界

{

略小于1.35,1.35,略大于1.35,1.675

略小于2,2,略大于2,3.25

略小于4.5,4.5,略大于4.5,69.75

略小于135,135,略大于135,

}

测试用例 白酒 红酒 啤酒 销售额 预期输出
test01 50 30 299 13495 啤酒输入非法
test02 50 30 300 13500 佣金:540
test03 50 30 301 13505 佣金:540.2
test04 50 30 3334 16750 佣金:3553.75
test05 50 30 1599 19995 佣金:799.8
test06 50 30 1600 20000 佣金:800
test07 50 30 1601 20005 佣金:800.05
test08 50 30 6484 32500 佣金:1044.2
test09 50 30 6599 44995 佣金:1049.95
test10 50 30 6600 45000 佣金:1050
test11 50 30 6601 45005 佣金:3300.025
test12 1115 3000 29813 697500 佣金:6557.765
test13 5000 3000 29999 1349995 佣金:9824.975
test14 5000 3000 30000 1350000 佣金:9825
test15 5000 3000 30001 1350005 啤酒输入非法

佣金计算代码(快速得到实验数据):

public class test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int x = scanner.nextInt();
            double m = 0;
            if (x <= 20000) {
                m = x * 0.04;
            } else if (x <= 45000) {
                m = (x - 20000) * 0.01 + 20000 * 0.04;
            } else { m = (x-45000)*0.005+25000*0.01+20000*0.04; }
            System.out.println(m);
        }
    }
}

日期检查模块

设有一个档案管理系统,要求用户输入以年月表示的日期。假设日期限定在1990年1月~2049年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。现用等价类划分法设计测试用例,来测试程序的"日期检查功能"。(请运用等价类法设计测试用例)

通过等价类划分标准,进行划分等价类

pp

为每个等价类设计测试用例

测试用例 实验数据 覆盖情况
1 200012 覆盖有效等价类①⑤⑧
2 sasd12 覆盖无效等价类②
3 12312433 覆盖无效等价类③
4 21343 覆盖无效等价类④
5 122210 覆盖无效等价类⑥
6 299910 覆盖无效等价类⑦
7 200000 覆盖无效等价类⑨
8 200018 覆盖无效等价类⑩

下一天日期问题

NextDate是一个接受年(year)、月(month)和日(day)三个输入变量的函数,程序输出所输入日期后面一天的日期。其中,年、月和日的取值满足如下条件:

(1)1896<=year<=2096

(2)1<=month<=12

(3)1<=day<=31

将输入不合法情况统一给出消息提示“输入不在有效范围”

1.列出所有的条件桩和动作桩

  • 条件桩

    Y1={年份:平年}
    Y2={年份:闰年}
    M1={月份:30天/月}
    M2={月份:31天/月}
    M3={月份:12月}
    M4={月份:2月}
    D1={日期:1~27日}
    D2={日期:28日}
    D3={日期:29日}
    D4={日期:30日}
    D5={日期:31日}
    条件桩C1取{Y1,Y2}中其一,C2取{M1,M2,M3,M4}中其一,C3取{ D1, D2, D3, D4, D5}中其一

  • 动作桩:

    A1:不可能
    A2:日期加一
    A3:日期置一
    A4:月份加一
    A5:月份置一
    A6:年份加一

2.确定规则的个数:

​ 除了28,29两种,条件为该项的个数:

​ 所以总的规则项数为4X5+2

3.填入条件项和动作项,形成初始决策表并简化,得到决策表
在这里插入图片描述

4.由决策表设计测试用例:
在这里插入图片描述

实验代码

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Arrays;
import java.util.List;

public class test {
    public static void main(String[] args) {

        Day day = new Day();
        // System.out.println(testx.getNextDay(2001, 4, 12));
        File file = new File("test.txt");
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(file));
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);

                // 获取日期信息
                String[] times = line.split(" ");
                int yearx = Integer.parseInt(times[0]);
                int monthx = Integer.parseInt(times[1]);
                int dayx = Integer.parseInt(times[2]);
                String nextDay = day.getNextDay(yearx, monthx, dayx);
                System.out.println(nextDay);
            }

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (Exception e) {
                // TODO: handle exception
            }

        }

    }
}
class Day{
    public int today_Y;
    public int today_M;
    public int today_D;
    public int MaxMonth;
    public List<Integer> Day31Monther;
    public List<Integer> Day30Monther;

    public void init() {
        Integer[] arr31 = { 1, 3, 5, 7, 8, 10, 12 };
        Integer[] arr30 = { 4, 6, 9, 11 };
        Day31Monther = Arrays.asList(arr31);
        Day30Monther = Arrays.asList(arr30);
    }

    public void setTest(int day, int month, int year) {
        init();
        this.today_D = day;
        this.today_M = month;
        this.today_Y = year;
        this.MaxMonth = setMaxMonthDay();

    }

    // 对于输入的数据进行判断,本年,本月,的天数
    public int setMaxMonthDay() {
        Integer month = new Integer(today_M);
        if (Day31Monther.contains(month)) {
            // 如果是三十一天的
            return 31;
        } else if (Day30Monther.contains(month)) {
            return 30;
        } else if (today_M == 2) {

            if (today_Y % 400 == 0 || (today_Y % 100 != 0 && today_Y % 4 == 0)) {
                return 29;
            } else
                return 28;
        }
        return -1;
    }

    public boolean dataTrue() {
        boolean b = true;
        if (today_D > MaxMonth) {
            b = false;
        }
        return b;
    }

    public String getNextDay(int in_year, int in_month, int in_day) {
        setTest(in_day, in_month, in_year);
        // System.out.println(today_D+":"+today_M+":"+today_Y+":"+MaxMonth);
        String info;

        if (!dataTrue()) {
            info = "输入不在有效范围";
            return info;
        }
        int day = today_D;
        int month = today_M;
        int year = today_Y;
        if (day == MaxMonth) {
            if (month == 12) {
                day = 1;
                month = 1;
                year += 1;
            } else {
                day = 1;
                month += 1;
            }
        } else {
            day += 1;
        }
        // day = (day + 1) % (MaxMonth+1);
        // month = (month + (day + 1) / MaxMonth) % 12;
        // year = year + ((month + (day + 1) / MaxMonth) / 12);
        info = year + "年"+  month+ "月"+  day +"日";
        return info;
    }

}

售票问题:

某游乐场售票系统提供三种游戏:“过山车”、“摩天轮”和“海盗船”,门票均为10元。现设计一个自动售票系统,只接受10元、20元的纸币。

(1) 若投入的是10元纸币,并按下“过山车”、“摩天轮”或“海盗船”按钮,就会送出相应游戏的门票。

(2) 若投入的是20元纸币,并在送出相应门票的同时会找还10元纸币(假设不存在没有零钱找的情况)。

  1. 条件桩:

    A1={投入金额10},

    A2={投入金额20},

    C1={选择1(过山车)}

    C2={选择2(摩天轮)}

    C3={选择3(海盗船)}

  2. 动作桩:

    D1={是否找钱},

    P1={出过山车票},

    p2={出摩天轮票},

    p3={出海盗船票}

  3. 确定规格个数: 2*3

  4. 填入条件项和动作项,形成初始决策表并简化,得到决策表

test1 test2 test3 test4 test5 test6
投币 A1 A1 A1 A2 A2 A2
按键 C1 C2 C3 C1 C2 C3
D1:找10元
P1:出过山车票
P2:出摩天轮票
P3:出海盗船票
  1. 由决策表设计测试用例:
用例编号 投币 按键 预期输出
1 10 1 出过山车票
2 10 2 出摩天轮票
3 10 3 出海盗船票
4 20 1 找10元 出过山车票
5 20 2 找10元 出摩天轮票
6 20 3 找10元 出海盗船票

实验代码

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Arrays;
import java.util.List;

public class test {
    public static void main(String[] args) {

        Day day = new Day();
        // System.out.println(testx.getNextDay(2001, 4, 12));
        File file = new File("test.txt");
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(file));
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);

                // 获取日期信息
                String[] times = line.split(" ");
                int yearx = Integer.parseInt(times[0]);
                int monthx = Integer.parseInt(times[1]);
                int dayx = Integer.parseInt(times[2]);
                String nextDay = day.getNextDay(yearx, monthx, dayx);
                System.out.println(nextDay);
            }

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (Exception e) {
                // TODO: handle exception
            }

        }

    }
}
class Day{
    public int today_Y;
    public int today_M;
    public int today_D;
    public int MaxMonth;
    public List<Integer> Day31Monther;
    public List<Integer> Day30Monther;

    public void init() {
        Integer[] arr31 = { 1, 3, 5, 7, 8, 10, 12 };
        Integer[] arr30 = { 4, 6, 9, 11 };
        Day31Monther = Arrays.asList(arr31);
        Day30Monther = Arrays.asList(arr30);
    }

    public void setTest(int day, int month, int year) {
        init();
        this.today_D = day;
        this.today_M = month;
        this.today_Y = year;
        this.MaxMonth = setMaxMonthDay();

    }

    // 对于输入的数据进行判断,本年,本月,的天数
    public int setMaxMonthDay() {
        Integer month = new Integer(today_M);
        if (Day31Monther.contains(month)) {
            // 如果是三十一天的
            return 31;
        } else if (Day30Monther.contains(month)) {
            return 30;
        } else if (today_M == 2) {

            if (today_Y % 400 == 0 || (today_Y % 100 != 0 && today_Y % 4 == 0)) {
                return 29;
            } else
                return 28;
        }
        return -1;
    }

    public boolean dataTrue() {
        boolean b = true;
        if (today_D > MaxMonth) {
            b = false;
        }
        return b;
    }

    public String getNextDay(int in_year, int in_month, int in_day) {
        setTest(in_day, in_month, in_year);
        // System.out.println(today_D+":"+today_M+":"+today_Y+":"+MaxMonth);
        String info;

        if (!dataTrue()) {
            info = "输入不在有效范围";
            return info;
        }
        int day = today_D;
        int month = today_M;
        int year = today_Y;
        if (day == MaxMonth) {
            if (month == 12) {
                day = 1;
                month = 1;
                year += 1;
            } else {
                day = 1;
                month += 1;
            }
        } else {
            day += 1;
        }
        // day = (day + 1) % (MaxMonth+1);
        // month = (month + (day + 1) / MaxMonth) % 12;
        // year = year + ((month + (day + 1) / MaxMonth) / 12);
        info = year + "年"+  month+ "月"+  day +"日";
        return info;
    }

}

隔一日问题:

程序有三个输入变量month、day、year分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上隔一天的日期。例如:输入为2020年3月21日,则该程序的输出为2020年3月23日。

  1. 列出所有的条件桩和动作桩
  • 条件桩

    Y1={年份:平年}

    Y2={年份:闰年}

    M1={月份:30天/月}

    M2={月份:31天/月}

    M3={月份:12月}

    M4={月份:2月}

    D1={日期:1~26日}

    D2={日期:27日}

    D3={日期:28日}

    D4={日期:29日}

    D5={日期:30日}

    D6={日期:31日}

    条件桩C1取{Y1,Y2}中其一,C2取{M1,M2,M3,M4}中其一,C3取{ D1, D2, D3, D4, D5,D6}中其一

  • 动作桩:

    A1:不可能

    A2:日期加二

    A3:日期置一

    A4:日期置二

    A5:月份加一

    A6:月份置一

    A7:年份加一

  1. 确定规则个数

3*6+1*6*2

  1. 填入条件项和动作项,形成初始决策表并简化,得到决策表

在这里插入图片描述

  1. 由决策表设计测试用例:

在这里插入图片描述

实验代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Arrays;
import java.util.List;

public class test03 {
    public static void main(String[] args) {

        // System.out.println(testx.getNextDay(2001, 4, 12));
        // 测试数据在下面,自行建立文档,只是为了更好的得到实验数据
        File file = new File("test.txt");
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(file));
            String line;
            GetNextDay kit = new GetNextDay();
            while ((line = br.readLine()) != null) {
                System.out.println(line);

                // 获得时间
                String[] times = line.split(" ");
                int yearx = Integer.parseInt(times[0]);
                int monthx = Integer.parseInt(times[1]);
                int dayx = Integer.parseInt(times[2]);
                String nextDay = kit.getNextDayS(yearx, monthx, dayx);
                System.out.println(nextDay);
            }

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (Exception e) {
                // TODO: handle exception
            }

        }

    }
}

class GetNextDay {
    public int today_Y;
    public int today_M;
    public int today_D;
    public int MaxMonth;
    public List<Integer> Day31Monther;
    public List<Integer> Day30Monther;

    public void init() {
        Integer[] arr31 = { 1, 3, 5, 7, 8, 10, 12 };
        Integer[] arr30 = { 4, 6, 9, 11 };
        Day31Monther = Arrays.asList(arr31);
        Day30Monther = Arrays.asList(arr30);
    }

    private void setTest(int day, int month, int year) {
        init();
        this.today_D = day;
        this.today_M = month;
        this.today_Y = year;
        this.MaxMonth = setMaxMonthDay();

    }
    // 找到本月最大天数
    public int setMaxMonthDay() {
        Integer month = new Integer(today_M);
        if (Day31Monther.contains(month)) {
            return 31;
        } else if (Day30Monther.contains(month)) {
            return 30;
        } else if (today_M == 2) {

            if (today_Y % 400 == 0 || (today_Y % 100 != 0 && today_Y % 4 == 0)) {
                return 29;
            } else
                return 28;
        }
        return -1;

    }

    public boolean dataTrue() {
        boolean b = true;
        if (today_D > MaxMonth) {
            b = false;
        }
        return b;
    }

    public String getNextDayS(int in_year, int in_month, int in_day) {
        setTest(in_day, in_month, in_year);
        
        String info;

        if (!dataTrue()) {
            info = "输入错误";
            return info;
        }
        int day = today_D;
        int month = today_M;
        int year = today_Y;
        
        day +=2;
        if(day>MaxMonth){
            day++;
            day = day%(MaxMonth+1);
            month++;
            if(month>12){
                month=1;
                year++;
            }
        }

        info = year + "年" + month + "月" + day + "日";
        return info;
    }

}

测试用例:

2001 4 12
2001 4 27
2001 4 28
2001 4 29
2001 4 30
2001 4 31
2001 5 12
2001 5 27
2001 5 28
2001 5 29
2001 5 30
2001 5 31
2001 12 12
2001 12 27
2001 12 28
2001 12 29
2001 12 30
2001 12 31
2001 2 12
2001 2 27
2001 2 28
2001 2 29
2004 2 27
2004 2 28
2004 2 29
2001 2 30
2001 2 31

自动售票机问题:

有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。

其规格说明如下:

(1)若投入5角钱的硬币,押下【橙汁】或【啤酒】的按钮,则相应的饮料就送出来。

(2)若投入1元钱的硬币,此时售货机没有零钱找,则一个显示【零钱找完】的红灯亮,这时在押下【橙汁】或【啤酒】按钮后,饮料不送出来而且1元硬币也退出来。

(3)若投入1元钱的硬币,此时售货机有零钱找,则显示【零钱找完】的红灯灭,这时在押下【橙汁】或【啤酒】按钮后,会送出饮料的同时退还5角硬币。

  1. 确定条件桩与条件项

    • 条件桩:

      T1={投5角}

      T2={投1元}

      B1={按【橙汁】按钮}

      B2={按【啤酒】按钮}

      H1={有零钱}

      H2={无零钱}

      T取{T1,T2}其中一项

      B取{B1,B2}其中一项

      H取{H1,H2}其中一项

    • 条件项

      A1={出橙汁}

      A2={出啤酒}

      A3={红灯亮}

      A4={找零钱}

      A5={无响应}

  2. 确定组合可能

    其中H条件只会出现在T2条件下,故总可能为2+2*2 六种可能

  3. 填入条件项和动作项,形成初始决策表并简化,得到决策表

在这里插入图片描述

​ 其中test5和test6中B为无关项,所以可以合并
在这里插入图片描述

  1. 由决策表设计测试用例:

在这里插入图片描述

设置键

T1=1

T2=2

B1=3

B2=4

H1=5

H2=6

实验代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class test04 {
    public static void main(String[] args) {
        // 只为了得到数据,可以自行修改输入流
        File f = new File("text04.txt");
        BufferedReader br = null;
        DoAction doAction = new DoAction();
        try {
            br = new BufferedReader(new FileReader(f));
            String line;
            String result;
            while ((line = br.readLine()) != null) {
                String[] choose = line.split(" ");
                //System.out.println(line);
                result = doAction.getResult(Integer.parseInt(
                    choose[0]), Integer.parseInt(choose[1]), Integer.parseInt(choose[2]));
                System.out.println(result);
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }

    }
}

class DoAction {
    private final int T1 = 1; // 投5
    private final int T2 = 2; // 投1元
    private final int B1 = 3; // 按橙汁
    private final int B2 = 4; // 按啤酒
    private final int H1 = 5; // 有零钱
    private final int H2 = 6; // 无零钱
    private final String[] responseS = { "出橙汁","出啤酒","找零钱","无响应"} ; 

    public String getResult(int T, int B, int H) {
        StringBuffer info = new StringBuffer("");
        if (H == H2 && T == T2) {
            return responseS[3];
        }
        if (B == B1) {
            info.append(responseS[0]);
        } else {
            info.append(responseS[1]);
        }
        if (T == T2) {
            info.append(" " + responseS[2]);
        }
        return info.toString();
    }
}


实验数据:

1 3 0
1 4 0
2 3 5
2 4 5
2 3 6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

黑盒测试(实践) 的相关文章

  • 软件测试开发/全日制/测试管理丨用户端 App 自动化测试

    随着移动应用的普及和发展 用户端 App 自动化测试成为确保应用质量 提高测试效率的关键环节 这一测试方法不仅可以模拟用户真实的操作行为 还能够覆盖多种设备和平台 为移动应用的稳定性和用户体验提供可靠的保障 选择合适的自动化测试框架 在用户
  • 软件测试开发/全日制/测试管理丨Docker容器技术

    Docker 是一种轻量级的容器技术 通过将应用程序及其所有依赖项封装到一个可移植的容器中 实现了应用程序的便携性 可部署性和可伸缩性 下面是关于 Docker 容器技术的主要概念和优势 主要概念 容器 Container 容器是一个轻量级
  • 【性能测试入门】:压力测试概念!

    压力测试可以验证软件应用程序的稳定性和可靠性 压力测试的目标是评估软件在极端负载条件下的鲁棒性和错误处理能力 并确保软件在紧急情况下不会崩溃 它甚至可以进行超出软件正常工作条件的测试 并评估软件在极端条件下的工作方式 在软件工程中 压力测试
  • 真的干不过,00后整顿职场已经给我卷麻了,想离职了...

    在程序员职场上 什么样的人最让人反感呢 是技术不好的人吗 并不是 技术不好的同事 我们可以帮他 是技术太强的人吗 也不是 技术很强的同事 可遇不可求 向他学习还来不及呢 真正让人反感的 是技术平平 却急于表现自己的人 每天加班到12点 在老
  • 软件测试|Python Selenium 库安装使用指南

    简介 Selenium 是一个用于自动化浏览器操作的强大工具 它可以模拟用户在浏览器中的行为 例如点击 填写表单 导航等 在本指南中 我们将详细介绍如何安装和使用 Python 的 Selenium 库 安装 Selenium 库 使用以下
  • JMeter 批量接口测试

    一 背景 最近在进行某中台的接口测试准备 发现接口数量非常多 有6 70个 而且每个接口都有大量的参数并且需要进行各种参数验证来测试接口是否能够正确返回响应值 想了几种方案后 决定尝试使用JMeter的csv读取来实现批量的接口测试 二 脚
  • 软件测试|Python openpyxl库使用指南

    简介 我们之前介绍过 python在自动化办公方面可以大放异彩 因为Python有许多的第三方库 其中有很多库就支持我们对office软件进行操作 熟练的使用Python对office进行操作 可以实现自动化办公 极大提升我们的工作效率 本
  • Linux终端常见用法总结

    熟悉Linux终端的基础用法和常见技巧可以极大提高运维及开发人员的工作效率 笔者结合自身学习实践 总结以下终端用法供同行交流学习 常 见 用 法 1 快捷键 1 1 Alt 在光标位置插入上一次执行命令的最后一个参数 1 2 Ctrl R
  • 2种方法,教你使用Python实现接口自动化中的参数关联

    通常在接口自动化中 经常会参数关联的问题 那么什么是参数关联 参数关联就是上一个接口的返回值会被下一个接口当做参数运用 其中Python中可以实现参数关联的方法有很多种 今天小编给大家介绍下 如何通过Python来实现接口自动化中的参数关联
  • 微信小程序的自动化测试框架

    微信发布了小程序的自动化测试框架Minium 提供了多种运行验证方式 其特点 支持一套脚本 iOS Android 模拟器 三端运行 提供丰富的页面跳转方式 看不到也能去得到 可以获取和设置小程序页面数据 让测试不止点点点 可以直接触发小程
  • 软件测试|Pydantic详细介绍与基础入门

    简介 Pydantic 是一个强大的 Python 库 用于数据验证和解析 特别是用于处理 JSON 数据 它的主要目标是使数据验证和解析变得简单 直观和可维护 本文将介绍 Pydantic 的基础知识 包括如何定义模型 验证数据以及处理错
  • 软件测试|使用Python轻松裁剪视频

    简介 裁剪视频是在视频编辑和处理中常见的任务之一 Python提供了多种库和工具 可以用来裁剪视频 在本文中 我们将详细讨论如何使用Python来裁剪视频 并提供示例代码 步骤1 环境准备 首先 我们要安装必要的Python库 我们将使用
  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML YAML Ain t Markup Language 是一种可读的数据序列化格式 它常用于配置文件和数据交换 Python 提供了许多库来处理 YAML 文件 在本文中 我们将探讨如何使用 PyYAML 库来读取和写入 YA
  • 测开和测试平台是否有存在的必要?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • 15:00面试,15:06就出来了,问的问题有点变态。。。

    从小厂出来 没想到在另一家公司又寄了 到这家公司开始上班 加班是每天必不可少的 看在钱给的比较多的份上 就不太计较了 没想到9月一纸通知 所有人不准加班 加班费不仅没有了 薪资还要降40 这下搞的饭都吃不起了 还在有个朋友内推我去了一家互联
  • 软件测试面试:还没有自动化测试项目经验,3个项目帮你走入软测职场!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 深入解析 YAML 配置文件:从语法到最佳实践

    一 认识YAML YAML YAML Ain t Markup Language 是一种人类可读的数据序列化语言 它的设计目标是使数据在不同编程语言之间交换和共享变得简单 YAML采用了一种简洁 直观的语法 以易于阅读和编写的方式表示数据结

随机推荐

  • Qt使用QTcpSocket及QTcpServer传输文件

    服务端具体代码如下 h include
  • Python学习笔记合集(Pyhton基础总结)

    Python学习笔记合集 Python学习笔记合集 Pyhton基础总结 第一天主要讲了Python基本语句 上 第二天主要讲了Python基本语句 下 第三天主要讲了import导包 库 和Python条件语句 第四天主要讲了Python
  • 闭包【JavaScript基础面试题】

    闭包的定义 如果一个函数能访问外部的变量 那么就形成了一个闭包 闭包形成的原理 当一个普通函数执行结束之后 函数内的变量会被全部销毁 垃圾回收 但是 如果某些变量在函数外部会被用到 那么该变量就不会被销毁 因此形成了闭包 可以看下面的例子
  • [INFO] [copilotIgnore] inactive,github copilot没反应怎么解决

    在使用github copilot的时候 插件不工作 后台出现了这种输出 这种情况下就是它的激活出现了问题 如果账号的使用权没有问题的话 就将该插件disable之后再重新enable 重新观察输出 就会看到copilot在重新链接引擎了
  • C语言头文件和条件编译

    目录 一 条件编译 1 ifdef else endif 2 ifndef 用法 3 if和 elif 4 上述指令的嵌套使用 5 line 和 error 6 pragma 二 include 1 头文件被包含的方式 1 1 本地文件包含
  • 基于 pytorch的 肺部x光片疾病识别

    目录 案例主要流程 数据集下载地址 数据示例 模型结构示意图 ResNet 网络结构图
  • Python基础数据之列表知识(二)

    Python基础数据之列表知识 二 一 列表的特点 二 列表的排序 三 列表的嵌套 1 嵌套的基本使用 2 嵌套的示例 四 列表的循环删除 五 列表相关知识链接 一 列表的特点 1 有序 2 独立 3 列表中的元素可以重复 二 列表的排序
  • 【数据结构】队列的链式实现

    链式队列定义及各类操作 include
  • 目标检测之Dynamic Head: Unifying Object Detection Heads with Attentions

    cvpr2021 论文 https arxiv org pdf 2106 08322v1 pdf 代码 https github com microsoft DynamicHead 1 摘要 作者认为目标检测的头部是由三个部分组成 首先 头
  • openpyxl表格样式设置

    import pandas as pd from openpyxl import Workbook from openpyxl import load workbook from openpyxl styles import Alignme
  • Atomic Operations (standardized memory model)

    C 规范未引用任何特定的编译器 操作系统或CPU 它引用了 abstract machine 抽象机 它是对实际系统的概括 在语言规范中 程序员的工作是为抽象机编写代码 编译器的工作是在具体机器上实现该代码 通过严格按照规范进行编码 可以确
  • Visual Studio显示C4996错误,建议使用scanf_s函数

    在使用Visual Studio时编译器显示C4996错误 原因是VS编译器无法识别scanf函数 scanf s函数才是VS编译器自带的输入函数 但是scanf s函数只能在VS编译器中使用 其它编译器不支持 如果想在VS编译器中使用sc
  • 如何去除table的边框_怎么把table的外面的边框去掉

    展开全部 它有三个参数 cols rows none 当rules cols时 表格会隐藏纵向的分隔线 这样我们就只能看到表格的行 当rules rows时 则隐藏了横向62616964757a686964616fe4b893e5b19e3
  • 定时上报GPS坐标信息至服务器

    定时上报GPS坐标信息至服务器 本文通过一个 定时上报GPS坐标信息至服务器 的例子来讲述Android网络应用程序的开发 使用最为流行的restfull接口 第一步 定义网络接口 客户端以post方式将经纬度上传至服务器 第二步 开发服务
  • c语言延时错误,延时函数报错,volatile一例

    延时函数出错 volatile一例 莫名其妙的错误 使用Systick做的延时 初始化是这样的 SysTick配置 SysTick CLKSourceConfig SysTick CLKSource HCLK Div8 if SysTick
  • 详解python中的round()函数

    round 是python自带的一个函数 用于数字的四舍五入 但是round 的输出结果与Python的版本有关 在python3中 round 1 0 2 0 0 在python2中 round 1 0 2 0 1 python Pyth
  • U盘启动中标麒麟V6双系统安装教程

    U盘启动中标麒麟V6双系统安装教程 本教程是双系统教程 一般是安装XP win7的机器需要安装中标麒麟的朋友使用 教程内容都是在网上找到相关资料结合自己经验编写 以供需要的朋友参考 一 准备工作 1 U盘一个 2G以上 2 下载中标麒麟V6
  • RTX3080在Ubuntu 20.04复现yolact

    1 背景 刚入门CV和deep learning几个月 想复现一下yolact 最初的计划是在实验室电脑搭建环境复现 后来发现RTX3080显卡只支持CUDA11 那么能下载的pytorch最低版本是1 7 于是搭建了一个pytorch1
  • Centos+Python3+Robot Framework环境搭建

    1 centos和python3环境安装 1 1在docker中搜索基于python3 6的centos镜像 docker search python 1 2 下载镜像 docker pull centos python 36 centos
  • 黑盒测试(实践)

    黑盒测试 实践 三角形问题 有一个程序 接收三个整数输入a b和c 分别表示三角形的三条边 a b和c的取值范围都为 1 100 程序根据输入的三条边判断三角形的类型 等边三角形 等腰三角形 普通三角形和不构成三角形 如果输入的a b和c不