TriangleTest——开发者测试例题

通过这两天学习了解了用Junit测试Java项目的方法,并练习了一个例子,现在写篇blog总结一下,这道题在慕测官网难度为易,主要考察代码覆盖。
项目代码:

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(2,3,4);
	Triangle T4 = new Triangle(0,1,2);
	Triangle T7 = new Triangle(Long.MAX_VALUE,2,4);
	Triangle T10 = new Triangle(3,3,3);
	Triangle T11= new Triangle(3,4,4);
	
	long []borders= {0,0,0}; 
	@Test
	public void testTriangle() {
		assertEquals(true, T1.isTriangle(T1));
		assertEquals(false,T4.isTriangle(T4));
		assertFalse(T7.isTriangle(T7));
		assertTrue(T10.isTriangle(T10));
		assertTrue(T11.isTriangle(T11));
	}

	@Test
	public void testGetType() {
		assertTrue("Illegal"==T4.getType(T4));	
		assertTrue("Regular"==T10.getType(T10));
		assertTrue("Isosceles"==T11.getType(T11));
		assertTrue("Scalene"==T1.getType(T1));
	}

	@Test
	public void testDiffOfBorders() {
		assertTrue(1==T1.diffOfBorders(T1.lborderA, T1.lborderB));
	}

	@Test
	public void testGetBorders() {
		borders=T1.getBorders();
		assertTrue(T1.lborderA==borders[0]);
		assertEquals(T1.lborderB,borders[1]);
		assertEquals(T1.lborderC,borders[2]);
	}
	
}

测试提交结果:
在这里插入图片描述
对于等价类,只需要一个测试用例即可覆盖;因为测试题目主要考察代码行的覆盖,所以将待测试方法全部进行测试即可。

对于测试中用到的断言语句:
assertTrue([message,] boolean condition) 验证boolean条件为true。
assertFalse([message,] boolean condition) 验证boolean条件为false。
assertEquals([message,] expected, actual) 验证expected和actual相同。

另外,了解了一些使用Junit进行单元测试的tips:

  • 1.测试方法上必须使用@Test进行修饰
  • 2.测试方法必须使用public void进行修饰,不能带任何的参数
  • 3.新建一个源代码目录来存放测试代码
  • 4.测试类的包应该和被测试类保持一致
  • 5.测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新西兰做的饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值