44.单元测试

单元测试

单元测试就是针对最小的功能单元编写测试代码,用于检查各单元的正确性。

Java程序最小的功能单元是方法,因此,对Java程序进行单元测试就是针对单个Java方法的测试。

使用 main 方法测试方法的问题

  • 只有一个main方法,如果其中一个方法异常终止,其他方法测试也会受到影响。
  • 无法得到测试的结果报告,需要程序员自己去观察。
  • 无法实现自动化测试。

JUnit 框架

JUnit是一个开源的Java语言的单元测试框架,专门针对Java设计,使用最广泛。JUnit是单元测试的标准框架,任何Java开发者都应当学习并使用JUnit编写单元测试。

此外,几乎所有的IDE工具都集成了JUnit。

JUnit 的优点

  • 一个方法的异常,不会影响其他方法的正常测试。
  • 可以生成测试报告。
  • 可以自动选择测试某些或全部方法。

不能测试私有方法

使用步骤

  1. 将JUnit jar包导入项目(IDEA中自带,不需要导入);

  2. 编写测试方法:必须是公共的、无参数的、无返回值的、非静态的方法;

  3. 在测试方法上使用 @Test 注解;

  4. 断言:在测试方法中完成被测试方法的预期正确性测试。方法 Assert.assertEquals()

  5. 选择测试方法,选择 “JUnit运行”。

测试如下类:

public class Menu {
    //...
    public boolean login(String username, String password) {
        //...
        if ("zhangsan".equals(username) && "123".equals(password)) {
            return true;
        } else {
            return false;
        }
    }

    public void selectName(String name) {
        //...
        System.out.println(1 / 0); //模拟异常
    }
}

操作演示

  1. 创建测试类,一般以 Test待测试类名 命名

  2. 创建测试方法,一般以 test方法名 命名,并加 @Test 注释

public class TestMenu {
    @Test
    public void testLoge() {
    }
    
    @Test
    public void testSelectName() {
    }
}

使用IDEA自动导入(下载)JUnit的jar包

光标定位到 @Test 按下 alt + enter 选择 JUnit4JUnit5 自动导入。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gehqYsJQ-1679666731003)(F:\文档\Notes\Java\images\image-20230117190810216.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BXl4e2iT-1679666731003)(F:\文档\Notes\Java\images\image-20230117190905169.png)]

  1. 编写测试方法(可断言)
@Test
public void testLoge() {
    Menu m = new Menu();
    boolean result = m.login("zhangsan", "123");
    //断言
    Assert.assertEquals("与预期不符", true, result);
}

@Test
public void testSelectName() {
    Menu m = new Menu();
    m.selectName("zhangsan");
}
  1. 测试

测试单个方法: 在需要测试的方法的“范围内”,右键选择 Run

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-be7F1xy5-1679666731004)(F:\文档\Notes\Java\images\image-20230117192405259.png)]

测试类中全部方法: 在类名处,右键选择 Run

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9xaIqLml-1679666731005)(F:\文档\Notes\Java\images\image-20230117192508795.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CawEvtSS-1679666731005)(F:\文档\Notes\Java\images\image-20230117192122096.png)]

测试项目中所有方法: 在项目处右键,选择 Run

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G1ofTnO1-1679666731006)(F:\文档\Notes\Java\images\image-20230117192810770.png)]

常用注解

JUnit4 注解JUnit5 注解说明
@Test@Test修饰测试方法
@Before@BeforeEach修饰实例方法,该方法在每个测试方法执行前都会执行一次
@After@AfterEach修饰实例方法,该方法在每个测试方法执行后都会执行一次
@BeforClass@BeforeAll修饰静态方法,该方法在所有测试方法执行前只执行一次
@AfterClass@AfterAll修饰静态方法,该方法在所有测试方法执行后只执行一次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是对题目三的测试用例设计和Java代码实现: 首先,根据题目要求,我们需要编写一个类来计算胶囊的面积,这里我将其命名为CapsuleAreaCalculator。该类包含两个方法,一个是计算矩形面积的方法,一个是计算圆形面积的方法。在计算胶囊面积的方法中,我们需要调用这两个方法来计算出正方形和圆形的面积,并将它们相加得到胶囊的面积。 CapsuleAreaCalculator.java: ``` public class CapsuleAreaCalculator { public double calculateRectangleArea(double length, double width) { if (length <= 0 || width <= 0) { throw new IllegalArgumentException("Length and width must be positive numbers."); } return length * width; } public double calculateCircleArea(double radius) { if (radius <= 0) { throw new IllegalArgumentException("Radius must be a positive number."); } return Math.PI * radius * radius; } public double calculateCapsuleArea(double length, double width, double radius) { double rectangleArea = calculateRectangleArea(length, width); double circleArea = calculateCircleArea(radius); return 2 * rectangleArea + circleArea; } } ``` 接下来,我们需要编写测试类CapsuleAreaCalculatorTest,并采用各种覆盖和测试方法来设计测试用例并进行测试。在测试类中,我们使用JUnit框架来编写测试方法,并使用插桩技术来进行测试。 CapsuleAreaCalculatorTest.java: ``` import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class CapsuleAreaCalculatorTest { private CapsuleAreaCalculator calculator; @Before public void setUp() { calculator = new CapsuleAreaCalculator(); } @Test public void testCalculateRectangleArea() { assertEquals(6.0, calculator.calculateRectangleArea(2.0, 3.0), 0.0); } @Test(expected = IllegalArgumentException.class) public void testCalculateRectangleAreaWithNegativeLength() { calculator.calculateRectangleArea(-2.0, 3.0); } @Test(expected = IllegalArgumentException.class) public void testCalculateRectangleAreaWithZeroWidth() { calculator.calculateRectangleArea(2.0, 0.0); } @Test public void testCalculateCircleArea() { assertEquals(Math.PI, calculator.calculateCircleArea(1.0), 0.0); } @Test(expected = IllegalArgumentException.class) public void testCalculateCircleAreaWithNegativeRadius() { calculator.calculateCircleArea(-1.0); } @Test(expected = IllegalArgumentException.class) public void testCalculateCircleAreaWithZeroRadius() { calculator.calculateCircleArea(0.0); } @Test public void testCalculateCapsuleArea() { assertEquals(44.8495559215, calculator.calculateCapsuleArea(2.0, 3.0, 1.0), 0.0); } @Test(expected = IllegalArgumentException.class) public void testCalculateCapsuleAreaWithNegativeLength() { calculator.calculateCapsuleArea(-2.0, 3.0, 1.0); } @Test(expected = IllegalArgumentException.class) public void testCalculateCapsuleAreaWithZeroWidth() { calculator.calculateCapsuleArea(2.0, 0.0, 1.0); } @Test(expected = IllegalArgumentException.class) public void testCalculateCapsuleAreaWithNegativeRadius() { calculator.calculateCapsuleArea(2.0, 3.0, -1.0); } @Test(expected = IllegalArgumentException.class) public void testCalculateCapsuleAreaWithZeroRadius() { calculator.calculateCapsuleArea(2.0, 3.0, 0.0); } } ``` 在上面的代码中,我们使用了各种不同的测试方法和覆盖方法,包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖、基路径测试方法。我们通过为不同的测试用例添加注释来说明它们所覆盖的覆盖方法。在测试方法中,我们使用assertEquals和fail方法来检查测试结果是否符合预期,如果测试结果不符合预期,则会抛出AssertionError异常。 最后,我们可以编写一个main方法来测试CapsuleAreaCalculator类的功能。以下是一个简单的示例: Main.java: ``` public class Main { public static void main(String[] args) { CapsuleAreaCalculator calculator = new CapsuleAreaCalculator(); double length = 2.0; double width = 3.0; double radius = 1.0; double area = calculator.calculateCapsuleArea(length, width, radius); System.out.println("The area of the capsule is " + area); } } ``` 以上就是对于题目三的测试用例设计和Java代码实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值