123

实验项目名称:实验四          

一、     实验目的

1、掌握单元测试的基本理论和作用。

2、掌握典型单元测试工具 JUnit 的使用

二、  实验内容

实验题目

 

三、  实验步骤及结果

源代码不用写在报告中,源代码上传学习通,在报告中可写:源程序见学习通平台。

 

 

 

1、实验任务 2:闰年判断程序及测试

实验步骤(简洁版,侧重任务特有逻辑)

需求分析

闰年定义:能被 4 整除但不能被 100 整除,或能被 400 整除的年份。

需覆盖的测试场景:

正常闰年(如 2020,能被 4 整除且非整百年)。

整百年闰年(如 2000,能被 400 整除)。

整百年非闰年(如 1900,能被 100 整除但不能被 400 整除)。

非闰年(如 2021,不能被 4 整除)。

编写闰年判断类 LeapYear

public class LeapYear { 

    public boolean isLeapYear(int year) { 

        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); 

    } 

 

设计测试用例与编写测试类 LeapYearTest

使用参数化测试覆盖不同年份,重点验证边界条件(整百年)。

@ParameterizedTest 

@CsvSource({ 

    "2000, true",   // 能被400整除,是闰年 

    "1900, false",  // 能被100整除但不能被400整除,非闰年 

    "2004, true",   // 能被4整除且非整百年,是闰年 

    "1999, false"   // 不能被4整除,非闰年 

}) 

void parameterizedLeapYearTest(int year, boolean expected) { 

    assertEquals(expected, leapYear.isLeapYear(year)); 

 

运行测试与结果验证

执行测试后,所有用例应通过,确保闰年逻辑正确处理边界条件。

 

 

 

 

 

 

. 需求分析

输入:三角形三边长度(支持浮点数)。

输出:分类结果(非法边长、非三角形、等边、等腰、直角、钝角、锐角)。

核心逻辑:

边长合法性检查(边长≤0 则非法);

三角形成立条件(任意两边之和大于第三边);

类型判断优先级:等边 > 直角 > 等腰 > 钝角 / 锐角(确保 “等腰直角三角形” 优先判定为直角三角形)。

package org.example; 

 

import java.util.Arrays; 

 

public class TriangleClassifier { 

    public String classifyTriangle(double a, double b, double c) { 

        // 边长合法性检查 

        if (a <= 0 || b <= 0 || c <= 0) { 

            return "非法边长(边长需>0)"; 

        } 

        // 三角形成立条件检查 

        if (a + b <= c || a + c <= b || b + c <= a) { 

            return "非三角形"; 

        } 

        // 排序边长以便后续判断 

        double[] sides = {a, b, c}; 

        Arrays.sort(sides); 

        double maxSide = sides[2]; 

        double sumSq = sides[0] * sides[0] + sides[1] * sides[1]; 

        double maxSq = maxSide * maxSide; 

 

        // **关键判断顺序:先直角后等腰,确保等腰直角三角形正确分类** 

        if (a == b && b == c) { 

            return "等边三角形"; 

        } else if (Math.abs(sumSq - maxSq) < 1e-9) {  // 优先判断直角三角形 

            return "直角三角形"; 

        } else if (a == b || a == c || b == c) {  // 再判断等腰三角形 

            return "等腰三角形"; 

        } else if (maxSq > sumSq) { 

            return "钝角三角形"; 

        } else { 

            return "锐角三角形"; 

        } 

    } 

 

设计测试用例与测试类TriangleClassifierTest

参数化测试:覆盖所有分类场景,包括非法边长、非三角形、等边、等腰、直角、钝角、锐角,以及浮点精度场景(如等腰直角三角形)。

 

package org.example; 

 

import org.junit.jupiter.api.BeforeEach; 

import org.junit.jupiter.params.ParameterizedTest; 

import org.junit.jupiter.params.provider.CsvSource; 

import static org.junit.jupiter.api.Assertions.*; 

 

class TriangleClassifierTest { 

    private TriangleClassifier classifier; 

 

    @BeforeEach 

    void setUp() { 

        classifier = new TriangleClassifier(); 

    } 

 

    @ParameterizedTest 

    @CsvSource({ 

        // 非法边长 

        "0, 3, 4, 非法边长(边长需>0)", 

        "-1, 2, 3, 非法边长(边长需>0)", 

        // 非三角形 

        "3, 4, 8, 非三角形", 

        "2, 2, 5, 非三角形", 

        // 等边三角形 

        "3, 3, 3, 等边三角形", 

        // 等腰三角形(非直角) 

        "3, 3, 4, 等腰三角形", 

        // 直角三角形(含等腰直角) 

        "3, 4, 5, 直角三角形", 

        "1, 1, 1.41421356, 直角三角形",  // 浮点精度测试(√2近似值) 

        // 钝角三角形 

        "2, 3, 4, 钝角三角形", 

        // 锐角三角形 

        "4, 5, 6, 锐角三角形" 

    }) 

    void parameterizedTriangleTest(double a, double b, double c, String expected) { 

        assertEquals(expected, classifier.classifyTriangle(a, b, c)); 

    } 

}  } 

 

posted @ 2025-04-21 22:47  /张根源/  阅读(26)  评论(0)    收藏  举报