开发者测试Triangle测试例子
题目源代码
package net.mooctest;
public class Triangle {
protected long lborderA = 0;
protected long lborderB = 0;
protected long lborderC = 0;
// Constructor
public Triangle(long lborderA, long lborderB, long lborderC) {
this.lborderA = lborderA;
this.lborderB = lborderB;
this.lborderC = lborderC;
}
/**
* check if it is a triangle
*
* @return true for triangle and false not
*/
public boolean isTriangle(Triangle triangle) {
boolean isTriangle = false;
// check boundary
if ((triangle.lborderA > 0 && triangle.lborderA <= Long.MAX_VALUE)
&& (triangle.lborderB > 0 && triangle.lborderB <= Long.MAX_VALUE)
&& (triangle.lborderC > 0 && triangle.lborderC <= Long.MAX_VALUE)) {
// check if subtraction of two border larger than the third
if (diffOfBorders(triangle.lborderA, triangle.lborderB) < triangle.lborderC
&& diffOfBorders(triangle.lborderB, triangle.lborderC) < triangle.lborderA
&& diffOfBorders(triangle.lborderC, triangle.lborderA) < triangle.lborderB) {
isTriangle = true;
}
}
return isTriangle;
}
/**
* Check the type of triangle
*
* Consists of "Illegal", "Regular", "Scalene", "Isosceles"
*/
public String getType(Triangle triangle) {
String strType = "Illegal";
//先判断是否是三角形
if (isTriangle(triangle)) {
// Is Regular
if (triangle.lborderA == triangle.lborderB
&& triangle.lborderB == triangle.lborderC) {
strType = "Regular";
}
// If scalene
else if ((triangle.lborderA != triangle.lborderB)
&& (triangle.lborderB != triangle.lborderC)
&& (triangle.lborderA != triangle.lborderC)) {
strType = "Scalene";
}
// if isosceles
else {
strType = "Isosceles";
}
}
return strType;
}
/**
* calculate the diff between borders
*
* */
public long diffOfBorders(long a, long b) {
return (a > b) ? (a - b) : (b - a);
}
/**
* get length of borders
*/
public long[] getBorders() {
long[] borders = new long[3];
borders[0] = this.lborderA;
borders[1] = this.lborderB;
borders[2] = this.lborderC;
return borders;
}
}
测试类代码,有一些解析
package net.mooctest;
import static org.junit.Assert.*;
import org.junit.Test;
public class TriangleTest {
//创建三角形例子,同样的三角形,不同的边长位置
Triangle T1=new Triangle(5, 3, 4);
Triangle T2=new Triangle(5,4,3);
Triangle T3=new Triangle(4,3,5);
//创建三角形一边的边长在边界值,在3个位置都设置一次
Triangle T4=new Triangle(5,Long.MAX_VALUE,4);
Triangle T5=new Triangle(5,3,Long.MAX_VALUE);
Triangle T6=new Triangle(Long.MAX_VALUE,3,4);
//创建三角形,边长为负值,在每个边都设置一次
Triangle T7=new Triangle(-1,3,4);
Triangle T8=new Triangle(5,-1,4);
Triangle T9=new Triangle(5,3,-1);
//创建等边三角形
Triangle T10=new Triangle(3,3,3);
//创建等腰三角形,每个边设置一次
Triangle T11=new Triangle(4,3,3);
Triangle T12=new Triangle(3,3,4);
Triangle T13=new Triangle(3,4,3);
//创建一个a<b的边长的正常的三角形,为后面第四个方法找a<b的输出做条件
Triangle T14=new Triangle(6,8,10);
//为第四个方法测试而建立的数组
long []borders= {0,0,0};
@Test
public void testIsTriangle() {
//在测试文档里要求使用断言(assert)
//asertTrue:如果括号里的值为True则往下执行
assertTrue(T1.isTriangle(T1));
assertTrue(T2.isTriangle(T2));
assertTrue(T3.isTriangle(T3));
assertFalse(T4.isTriangle(T4));
assertFalse(T5.isTriangle(T5));
assertFalse(T6.isTriangle(T6));
assertFalse(T7.isTriangle(T7));
assertFalse(T8.isTriangle(T8));
assertFalse(T9.isTriangle(T9));
assertTrue(T10.isTriangle(T10));
assertTrue(T11.isTriangle(T11));
assertTrue(T12.isTriangle(T12));
assertTrue(T13.isTriangle(T13));
assertTrue(T14.isTriangle(T14));
}
@Test
public void testgetType() {
//asertEquals,后面的值与前面的值一样则往下执行
assertEquals("Illegal", T4.getType(T4));//不是三角形
assertEquals("Regular", T10.getType(T10));//等边三角形
assertEquals("Scalene", T14.getType(T14));//三边不等的三角形
assertEquals("Isosceles", T11.getType(T11));//等腰三角形
assertFalse("Illegal"==T1.getType(T1));
assertFalse("Regular"==T2.getType(T2));
assertFalse("Scalene"==T10.getType(T10));
assertFalse("Isosceles"==T3.getType(T3));
assertTrue("Illegal"==T5.getType(T5));
assertTrue("Regular"==T10.getType(T10));
assertTrue("Scalene"==T14.getType(T14));
assertTrue("Isosceles"==T12.getType(T12));
}
@Test
public void testdiffOfBorders() {
//对三目运算结果都输出一次,a-b 和 b-a,还有当a=b的时候
assertEquals(0,T10.diffOfBorders(T10.lborderA, T10.lborderB));//a=b
assertEquals(2,T14.diffOfBorders(T14.lborderA, T14.lborderB));//输出b-a
assertTrue(2==T1.diffOfBorders(T1.lborderA, T1.lborderB));//输出a-b
assertFalse(1==T1.diffOfBorders(T1.lborderA, T1.lborderB));//输出a-b
}
@Test
public void testgetBorders() {
borders=T10.getBorders();
//对数组里的全部元素进行比较检测
assertEquals(T10.lborderA,borders[0]);
assertTrue(T10.lborderB==borders[1]);
assertTrue(T10.lborderC==borders[2]);
}
}