等價類划分
輸 入 條 件
|
輸入三個整數 |
有效等價類 |
無效等價類 |
1、 整數 2、 3個整數 3、 非0整數 4、 正數
|
13、一邊為非整數 14、兩邊為非整數 15、三遍為非整數 16、數字個數小於3 17、數字個數大於3 18、一邊為0 19、兩邊為0 20、三遍為0 21、一邊小0 22、兩邊小於0 23、三邊小於0 24、一邊大於100 25、兩邊大於100 26、三邊大於100
|
||
輸 出 條 件 |
構成不等邊三角形 |
5、 a+b>c 6、 a+c>b 7、 b+c>a |
27、a+b<=c 28、b+c<=a 29、c+a<=b |
構成等腰三角形 |
8、 a=b且滿足5 9、 b=c且滿足7 10、 c=a且滿足6 |
|
|
構成等邊三角形 |
11、a=b=c |
|
|
不構成三角形 |
12、不滿足5,6,7中的一個 |
|
等價類划分測試用例
等價類划分測試用例 |
||||||
測試用例編號 |
等價類條件 |
測試用例 |
預期結果 |
|||
a |
b |
c |
d |
|||
1 |
1,2,3,4,5,6,7 |
2 |
3 |
4 |
|
普通三角形 |
2 |
1,2,3,4,5,6,7,8 |
2 |
2 |
3 |
|
等腰三角形 |
3 |
1,2,3,4,5,6,7,9 |
2 |
3 |
2 |
|
等腰三角形 |
4 |
1,2,3,4,5,6,7,10 |
3 |
2 |
2 |
|
等腰三角形 |
5 |
1,2,3,4,5,6,7,11 |
2 |
2 |
2 |
|
等邊三角形 |
6 |
1,2,3,4,12 |
1 |
2 |
3 |
|
不構成三角形 |
7 |
1,2,3,4,5,6,7,13 |
2.1 |
3 |
4 |
|
不構成三角形(未測試) |
8 |
1,2,3,4,5,6,8,14 |
2.1 |
2.1 |
3 |
|
不構成三角形(未測試) |
9 |
1,2,3,4,5,6,9,15 |
2.1 |
2.1 |
2.1 |
|
不構成三角形(未測試) |
10 |
1,3,4,,16 |
2 |
3 |
null |
|
不構成三角形(未測試) |
11 |
1,2,3,17 |
2 |
3 |
4 |
3 |
不構成三角形(未測試) |
12 |
1,2,18 |
0 |
2 |
3 |
|
拋出異常 |
13 |
1,2,19 |
0 |
0 |
2 |
|
拋出異常 |
14 |
1,2,20 |
0 |
0 |
0 |
|
拋出異常 |
15 |
1,2,3,21 |
-1 |
2 |
2 |
|
拋出異常 |
16 |
1,2,3,22 |
-1 |
-2 |
2 |
|
拋出異常 |
17 |
1,2,3,23 |
-2 |
-2 |
-2 |
|
拋出異常 |
18 |
1,2,3,4,24 |
111 |
99 |
99 |
|
拋出異常 |
19 |
1,2,3,4,25 |
111 |
111 |
99 |
|
拋出異常 |
20 |
1,2,3,4,26 |
111 |
111 |
111 |
|
拋出異常 |
21 |
1,2,3,4,27 |
2 |
3 |
5 |
|
不構成三角形 |
22 |
1,2,3,4,28 |
5 |
2 |
3 |
|
不構成三角形 |
23 |
1,2,3,4,29 |
2 |
5 |
3 |
|
不構成三角形 |
一般邊界值4n+1
僅考慮有效區間單個變量邊界值(一般邊界值):用最小值、略高於最小值、正常值、略低於最大值和最大值。
一般邊界分析值測試用例 |
|||||
測試用例編號 |
數據列表 |
預期輸出 |
|||
a |
b |
c |
|||
1 |
1 |
50 |
50 |
等腰三角形 |
|
2 |
2 |
50 |
50 |
等腰三角形 |
|
3 |
50 |
50 |
50 |
等邊三角形 |
|
4 |
99 |
50 |
50 |
等腰三角形 |
|
5 |
100 |
50 |
50 |
不構成三角形 |
|
6 |
50 |
1 |
50 |
等腰三角形 |
|
7 |
50 |
2 |
50 |
等腰三角形 |
|
8 |
50 |
99 |
50 |
等腰三角形 |
|
9 |
50 |
100 |
50 |
不構成三角形 |
|
10 |
50 |
50 |
1 |
等腰三角形 |
|
11 |
50 |
50 |
2 |
等腰三角形 |
|
12 |
50 |
50 |
99 |
等腰三角形 |
|
13 |
50 |
50 |
100 |
不構成三角形 |
健壯邊界值6n+1
同時考慮有效區間和無效區間單個變量邊界值(健壯邊界值):除了最小值、略高於最小值、正常值、略低於最大值、最大值,還要有略超過最大值和略小於最小值的值。
健壯邊界分析值測試用例 |
|||||
測試用例編號 |
數據列表 |
預期輸出 |
|||
a |
b |
c |
|||
1 |
0 |
50 |
50 |
拋出異常 |
|
2 |
1 |
50 |
50 |
等腰三角形 |
|
3 |
2 |
50 |
50 |
等腰三角形 |
|
4 |
50 |
50 |
50 |
等邊三角形 |
|
5 |
99 |
50 |
50 |
等腰三角形 |
|
6 |
100 |
50 |
50 |
不構成三角形 |
|
7 |
101 |
50 |
50 |
拋出異常 |
|
8 |
50 |
0 |
50 |
拋出異常 |
|
9 |
50 |
1 |
50 |
等腰三角形 |
|
10 |
50 |
2 |
50 |
等腰三角形 |
|
11 |
50 |
99 |
50 |
等腰三角形 |
|
12 |
50 |
100 |
50 |
不構成三角形 |
|
13 |
50 |
101 |
50 |
拋出異常 |
|
14 |
50 |
50 |
0 |
拋出異常 |
|
15 |
50 |
50 |
1 |
等腰三角形 |
|
16 |
50 |
50 |
2 |
等腰三角形 |
|
17 |
50 |
50 |
99 |
等腰三角形 |
|
18 |
50 |
50 |
100 |
不構成三角形 |
|
19 |
50 |
50 |
101 |
拋出異常 |
被測試代碼
被測試類TriangleProblem.class @Component public class TriangleProblem { public void determine(int a,int b,int c){ if(a<=0||b<=0||c<=0) { throw new IllegalArgumentException("請輸入大於0的邊長"); } else if (a>100||b>100||c>100) { throw new IllegalArgumentException("請輸入小於101的邊長"); } else if (a + b >c && a + c >b && b + c >a) {// 判斷是否三角形 // 判斷三角形類型 if (a == b && b == c && c == a) { System.out.println("等邊三角形"); } else if (a == b || a == c || b == c) { System.out.println("等腰三角形"); }else{System.out.println("普通三角形");} } else { System.out.println("非三角形"); } } }
測試代碼
測試類 public class TriangleProblemTest { static class TestCase{ int a, b, c; String t; Class<? extends Exception> e; public TestCase(int a,int b,int c,String t) { this.a = a; this.b = b; this.c = c; this.t = t; } TestCase(int a,int b,int c,Class<? extends Exception> e){ this.a = a; this.b = b; this.c = c; this.e = e; } } @ParameterizedTest @MethodSource("valid_equivalence_class") public void valid_equivalence_class(TestCase tc){ TriangleProblem problem = new TriangleProblem(); ByteArrayOutputStream stream = new ByteArrayOutputStream(); System.setOut(new PrintStream(stream)); problem.determine(tc.a,tc.b,tc.c); assertEquals(tc.t , stream.toString().trim()); } static Stream<TestCase> valid_equivalence_class(){ return Stream.of( new TestCase(2,3,4,"普通三角形"), new TestCase(2,2,3,"等腰三角形"), new TestCase(2,3,2,"等腰三角形"), new TestCase(3,2,2,"等腰三角形"), new TestCase(2,2,2,"等邊三角形"), new TestCase(1,2,3,"非三角形"), new TestCase(2,3,5,"非三角形"), new TestCase(5,2,3,"非三角形"), new TestCase(2,5,3,"非三角形") ); } @ParameterizedTest @MethodSource("invalid_equivalence_class") public void test_valid_equivalence_class(TestCase tc){ TriangleProblem problem = new TriangleProblem(); assertThrows(tc.e,()->problem.determine(tc.a,tc.b,tc.c)); } static Stream<TestCase> invalid_equivalence_class(){ return Stream.of( new TestCase(0,2,3,IllegalArgumentException.class), new TestCase(0,0,2,IllegalArgumentException.class), new TestCase(0,0,0,IllegalArgumentException.class), new TestCase(-1,2,2,IllegalArgumentException.class), new TestCase(-1,-2,2,IllegalArgumentException.class), new TestCase(-2,-2,2,IllegalArgumentException.class), new TestCase(111,99,99,IllegalArgumentException.class), new TestCase(111,111,99,IllegalArgumentException.class), new TestCase(111,111,111,IllegalArgumentException.class) ); } }