血压诊断标准如下:
低血压(收缩压<90 或 舒张压<60)
正常高值(120<=收缩压<=139和 80<=舒张压<=89 )
正常血压(90<=收缩压<=130和60<=舒张压<=90)
1级高血压(140<=收缩压<=159 或 90<=舒张压<=99)
2级高血压(160<=收缩压<=179 或 100<=舒张压<=109)
3级高血压(180<=收缩压 或 110<=舒张压)
异常值(其它值)
BloodPressure实现代码如下:
package sample;
public class BloodPressure {
int systolicProssure; //收缩压
int diatolicProssure; //舒张压
//设置属性
public int getSystolicProssure() { return systolicProssure;
}
public void setSystolicProssure(int systolicProssure) {
this.systolicProssure = systolicProssure;
}
public int getDiatolicProssure() { return diatolicProssure;
}
public void setDiatolicProssure(int diatolicProssure) {
this.diatolicProssure = diatolicProssure;
}
//设置收缩压和舒张压
public void setParams(int sysPressure, int diaProssure) { systolicProssure = sysPressure;
diatolicProssure = diaProssure;
}
//构造函数
public BloodPressure() { systolicProssure = 0;
diatolicProssure = 0;
}
public BloodPressure(int sysPressure, int diaPressure) { systolicProssure = sysPressure;
diatolicProssure = diaPressure;
}
//根据血压值判断所属血压分级
public String getPressureLevel() {
String level = "";
if ( systolicProssure < 90 || diatolicProssure < 60 ) {
level = "低血压";
}
else if ((systolicProssure >= 120 && systolicProssure <= 139) && (diatolicProssure >= 80 &&
diatolicProssure <= 89)) {
level = "正常高值";
}
else if ((90 <= systolicProssure && systolicProssure <= 130) && (60 <= diatolicProssure &&
diatolicProssure <= 90) ){
level = "正常血压";
} else if ((systolicProssure >= 180) || (diatolicProssure >= 110)) {
level = "3级高血压";
}else if ((systolicProssure >= 160 && systolicProssure <= 179) || (diatolicProssure >= 100 &&
diatolicProssure <= 109)) {
level = "2级高血压";
} else if ((systolicProssure >= 140 && systolicProssure <= 159) || (diatolicProssure >= 90 &&
diatolicProssure <= 99)) {
level = "1级高血压";
} else {
level = "异常值";
}return level;
}
}
针对BloodPressure设计测试用例。针对BloodPressure的输入域和输出域采取等价类划分法、边界值分析法设计测试用例。
输入 |
脉压差 |
等价类/边界值 |
预期输出 |
||
用例编号 |
收缩压 |
舒张压 |
|||
1 |
90 |
59 |
31 |
血压输入、脉压差边界值 |
低血压并且脉压差理想 |
2 |
120 |
78 |
42 |
血压输入边界值 |
正常并且脉压差正常 |
3 |
110 |
55 |
55 |
血压输入、脉压差等价类 |
低血压并且脉压差正常 |
4 |
79 |
60 |
19 |
血压输入、脉压差边界值 |
低血压并且脉压差缩小 |
5 |
111 |
50 |
61 |
血压输入等价类,脉压差边界值 |
低血压并且脉压差扩大 |
6 |
78 |
59 |
19 |
血压输入、脉压差边界值 |
低血压并且脉压差缩小 |
7 |
120 |
59 |
61 |
血压输入、脉压差边界值 |
低血压并且脉压差扩大 |
8 |
90 |
60 |
30 |
血压输入、脉压差边界值 |
正常血压并且脉压差理想 |
9 |
90 |
70 |
20 |
血压输入、脉压差边界值 |
正常血压并且脉压差正常 |
10 |
90 |
71 |
19 |
血压输入、脉压差边界值 |
正常血压并且脉压差缩小 |
11 |
121 |
59 |
62 |
血压输入边界值、脉压差等价类 |
低血压并且脉压差扩大 |
12 |
130 |
89 |
41 |
血压输入边界值、脉压差等价类 |
正常高值并且脉压差正常 |
13 |
91 |
61 |
30 |
血压输入边界值、脉压差等价类 |
正常血压并且脉压差理想 |
14 |
91 |
81 |
10 |
血压输入边界值、脉压差等价类 |
正常血压并且脉压差缩小 |
15 |
129 |
60 |
69 |
血压输入边界值、脉压差等价类 |
正常血压并且脉压差扩大 |
16 |
129 |
61 |
68 |
血压输入边界值、脉压差等价类 |
正常血压并且脉压差扩大 |
17 |
129 |
89 |
40 |
血压输入、脉压差边界值 |
正常高值并且脉压差理想 |
18 |
129 |
81 |
48 |
血压输入边界值、脉压差等价类 |
正常高值并且脉压差正常 |
19 |
130 |
60 |
70 |
血压输入边界值、脉压差等价类 |
正常血压并且脉压差扩大 |
20 |
130 |
61 |
69 |
血压输入边界值、脉压差等价类 |
正常血压并且脉压差扩大 |
21 |
139 |
80 |
59 |
血压输入、脉压差边界值 |
正常高值并且脉压差正常 |
22 |
139 |
89 |
50 |
血压输入边界值、脉压差等价类 |
正常高值并且脉压差正常 |
23 |
140 |
89 |
51 |
血压输入边界值、脉压差等价类 |
1级高血压并且脉压差正常 |
24 |
141 |
89 |
52 |
血压输入边界值、脉压差等价类 |
1级高血压并且脉压差正常 |
25 |
141 |
91 |
50 |
血压输入边界值、脉压差等价类 |
1级高血压并且脉压差正常 |
26 |
159 |
89 |
70 |
血压输入边界值、脉压差等价类 |
1级高血压并且脉压差扩大 |
27 |
160 |
89 |
71 |
血压输入边界值、脉压差等价类 |
2级高血压并且脉压差扩大 |
28 |
179 |
89 |
90 |
血压输入边界值、脉压差等价类 |
2级高血压并且脉压差扩大 |
29 |
159 |
91 |
68 |
血压输入边界值、脉压差等价类 |
1级高血压并且脉压差扩大 |
30 |
160 |
91 |
69 |
血压输入边界值、脉压差等价类 |
2级高血压并且脉压差扩大 |
31 |
179 |
91 |
88 |
血压输入边界值、脉压差等价类 |
2级高血压并且脉压差扩大 |
32 |
180 |
110 |
70 |
血压输入边界值、脉压差等价类 |
3级高血压并且脉压差扩大 |
33 |
181 |
110 |
71 |
血压输入边界值、脉压差等价类 |
3级高血压并且脉压差扩大 |
34 |
181 |
111 |
70 |
血压输入边界值、脉压差等价类 |
3级高血压并且脉压差扩大 |
35 |
0 |
60 |
60 |
血压输入无效等价类、脉压差边界值 |
异常值 |
36 |
90 |
0 |
90 |
血压输入无效等价类、脉压差等价类 |
异常值 |
37 |
¥ |
60 |
血压输入、脉压差无效等价类 |
异常值 |
|
38 |
90 |
¥ |
血压输入、脉压差无效等价类 |
异常值 |
血压用例先设计这么多,用例不可能穷尽,只有代表性的用例才有意义。
BloodPressure建立测试类BloodPressureTest。
代码如下:
package sample;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
import org.junit.experimental.categories.Category;
import static org.junit.Assert.*;
//指定参数化运行器
@RunWith(Parameterized.class)
public class BloodPressureTest {
//1、定义属性
@Parameterized.Parameter(0)
public int systolicProssure; //收缩压
@Parameterized.Parameter(1)
public int diatolicProssure; //舒张压
@Parameterized.Parameter(2)
public String expected; //预期结果
//准备测试数据集
@Parameterized.Parameters(name = "{index}:getPressureLevel[{0},{1}]=[{2}]")
public static Collection testDataset() { return Arrays.asList(new Object[][]
{
{79, 60, "低血压"}, {90, 60, "正常血压"}, {150, 95, "1级高血压"}, {170, 105, "2级高血压"}, {190, 120, "3级高血压"}
});
}
//定义被测类
BloodPressure testobj;
@Before public void setUp() throws Exception {
testobj = new BloodPressure(systolicProssure, diatolicProssure);
}
@After public void tearDown() throws Exception {
testobj = null;
}
@Test
public void getPressureLevel() { assertTrue(testobj.getPressureLevel() == expected);
}
}
BloodPressure类测试用例分类。
直接给出代码:
package sample;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import static org.junit.Assert.*;
public class BloodPressureTestByCategory {
//定义被测类
BloodPressure testObj;
@Before public void setUp() throws Exception {
testObj = new BloodPressure();
}
@After public void tearDown() throws Exception {
testObj = null;
}
@Category({EPTest.class})
@Test
public void getPressureLevel_Normal() {
testObj.setParams(110, 50); assertTrue(testObj.getPressureLevel() == "低血压");
}
@Category({EPTest.class})
@Test
public void getPressureLevel_NormalHigher() {
testObj.setParams(78, 59); assertTrue("低血压" == testObj.getPressureLevel());
}
@Category({EPTest.class})
@Test
public void getPressureLevel_FirstLevel() {
testObj.setParams(150, 95); assertTrue("1级高血压" == testObj.getPressureLevel());
}
@Category({EPTest.class})
@Test
public void getPressureLevel_SecondLevel() {
testObj.setParams(170, 105); assertTrue("2级高血压" == testObj.getPressureLevel());
}
@Category({EPTest.class})@Test
public void getPressureLevel_ThirdLevel() {
testObj.setParams(190, 120); assertTrue("3级高血压" == testObj.getPressureLevel());
}@Category({BVTTest.class}) @Test
public void getPressureLevel_Boundary1() {
testObj.setParams(90, 60); assertTrue("正常血压" == testObj.getPressureLevel());
}@Test
public void getPressureLevel_Boundary2() {
testObj.setParams(120, 85); assertTrue("正常高值" == testObj.getPressureLevel());
}@Test
public void getPressureLevel_Boundary3() {
testObj.setParams(121, 85); assertTrue("正常高值" == testObj.getPressureLevel());
}@Test
public void getPressureLevel_Boundary4() {
testObj.setParams(139, 85); assertTrue("正常高值" == testObj.getPressureLevel());
}@Test
public void getPressureLevel_Boundary5() {
testObj.setParams(140, 85); assertTrue("1级高血压" == testObj.getPressureLevel());
}@Test
public void getPressureLevel_Boundary6() {
testObj.setParams(141, 85); assertTrue("1级高血压" == testObj.getPressureLevel());
}@Test
public void getPressureLevel_Boundary7() {
testObj.setParams(159, 85); assertTrue("1级高血压" == testObj.getPressureLevel());
}@Test
public void getPressureLevel_Boundary8() {
testObj.setParams(160, 85); assertTrue("2级高血压" == testObj.getPressureLevel());
}@Test
public void getPressureLevel_Boundary9() {
testObj.setParams(179, 85); assertTrue("2级高血压" == testObj.getPressureLevel());
}
结束。