Lab1 3014218071 王汉超
Request:
Write a program with a function(getTriangleStatus) and test it, which takes three double number l1, l2, l3 as lengths of triangle sides and calculates whether the triangle is equilateral, isosceles, or scalene.
Contents:
一. 导入相应包
1.导入 JUnit, Hamcrest
右键项目名 -> 选择 属性Properties -> 选择 Libraries -> 选择 JUnit4 -> Finish
2. 导入
Help -> Install new software -> Add -> Local -> 选择本地文件Eclemma路径 -> 安装, 安装后重启.
二、实验内容
1.Description
判断三角形类型的程序:
Input 三条边的长度(double): l1, l2, l3
Output 构成三角形类型(int): 1 -- 错误(边长不是正实数); 0 -- 不构成三角形, 1 -- 非等腰(scalene)三角形, 2 -- 等腰不等边(isosceles)三角形, 3 -- 等边(equilateral)三角形
2.Codes:
gitHub: https://github.com/E-C-Ares/ST2017_Lab1
Main.java:
package isTriangle; import java.util.Scanner; public class Main { public static int getTriangleStatus(double l1, double l2, double l3) { int s = -1; double temp = 0; //l1 > l2 > l3 if (l2 > l1){ temp = l2; l2 = l1; l1 = temp; } if (l3 > l1){ temp = l3; l3 = l1; l1 = temp; } if (l3 > l2){ temp = l3; l3 = l2; l2 = temp; } if(l3 > 0){ if(l1 >= l2 + l3) { s = 0; } else if(l1 < l2 + l3){ s = 1; if(l1 == l2 || l2 == l3) { s ++; if(l1 == l3) { s ++; } } } } return s; } @SuppressWarnings("resource") public static void main(String[] args){ Scanner edges = new Scanner(System.in); System.out.println("输入三条边的长度:"); double l1 = edges.nextDouble(); double l2 = edges.nextDouble(); double l3 = edges.nextDouble(); int s = getTriangleStatus(l1, l2, l3); switch (s){ case -1: System.out.println("输入不符合要求"); break; case 0: System.out.println("不构成三角形"); break; case 1: System.out.println("一般三角形"); break; case 2: System.out.println("仅等腰三角形"); break; case 3: System.out.println("等边三角形"); break; } main(args); } }
3.JUnit Test & Eclemma Cover:
为了避免污染源代码, 测试代码和源代码放置于不同的文件夹中:
右键项目 -> New -> JUnit Test Case -> 选择被测试函数: 截图如下:
MainTest.java:
package isTriangle; import static org.junit.Assert.*; import org.junit.Test; public class MainTest { Main t= new Main(); //getTriangleStatus getStatus = new getTriangleStatus(); @Test public void test1() { assertEquals("Should be an equilateral triangle", 3, t.getTriangleStatus(1.0, 1.0, 1.0)); } @Test public void test2() { assertEquals("Should be an ERROR!", -1, t.getTriangleStatus(0, 0, 0)); } @Test public void test3() { assertEquals("Should be an ERROR!", -1, t.getTriangleStatus(0, 1, 1)); } @Test public void test4() { assertEquals("Should be an ERROR!", -1, t.getTriangleStatus(-0.01, 9.0, 9.0)); } @Test public void test5() { assertEquals("Should be an isosceles triangle", 2, t.getTriangleStatus(2, 2, 3)); } @Test public void test6() { assertEquals("Should be an isosceles triangle", 0, t.getTriangleStatus(1, 1, 2)); } @Test public void test7() { assertEquals("Should be a scalene triangle", 1, t.getTriangleStatus(10.0000, 10.0001, 10.0002)); } @Test public void test8() { assertEquals("Should be a scalene triangle", 1, t.getTriangleStatus(10.0000, 10.0001, 10.0002)); } @Test public void test9() { assertEquals("Should be a scalene triangle", 1, t.getTriangleStatus(10.0000, 10.0001, 10.0002)); } @Test public void test10() { assertEquals("Should be a scalene triangle", 1, t.getTriangleStatus(10.0000, 10.0001, 10.0002)); } @Test public void test11() { assertEquals("Should be a scalene triangle", 1, t.getTriangleStatus(10.0, 9.0, 8.0)); } }
Run -> Coverage last launched
三. 实验结果
Junit 测试用例 与 Eclemma 覆盖检测:
四. 总结
学会了安装jar包, 使用 JUnit 和 Eclemma 进行测试, 习得在测试的过程中应该考虑到尽可能多的情况, 以满足程序的完备性.