You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为现有Java Robot类的move方法编写JUnit测试

JUnit move方法完整测试实现方案

测试覆盖逻辑

move方法核心逻辑是根据不同地形类型修正dx、dy后更新自身x、y坐标,固定返回0。测试需要覆盖所有分支场景,验证坐标更新规则和返回值符合预期,覆盖场景包括:

  • terrain_type=0 双倍移动分支
  • terrain_type=1 半速移动分支(额外覆盖整数除法边界场景)
  • terrain_type为其他值的无修正移动分支
  • 验证方法固定返回0的逻辑

完整实现代码

以下为JUnit 5版本实现,默认测试类与Robot类在同一包下,可直接访问包级权限的x、y属性,若属性为私有可给Robot类添加getX()、getY()公共方法即可。

单场景独立测试写法

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

class RobotTest {

    // 测试terrain_type=0 双倍移动场景
    @Test
    void move_terrainType0_doubleDistance() {
        Robot testSubject = new Robot(5, 5, 10);
        double result = testSubject.move(2, 2, 0);
        // 验证返回值固定为0
        assertEquals(0, result);
        // 验证坐标:dx=2*2=4,x=5+4=9;dy=2*2=4,y=5+4=9
        assertEquals(9, testSubject.x);
        assertEquals(9, testSubject.y);
    }

    // 测试terrain_type=1 半速移动场景(覆盖整数除法边界)
    @Test
    void move_terrainType1_halfDistance() {
        Robot testSubject = new Robot(5, 5, 10);
        double result = testSubject.move(3, 3, 1);
        assertEquals(0, result);
        // 验证坐标:dx=3/2=1,x=5+1=6;dy=3/2=1,y=5+1=6
        assertEquals(6, testSubject.x);
        assertEquals(6, testSubject.y);
    }

    // 测试terrain_type为其他值 无修正移动场景
    @Test
    void move_terrainTypeOther_originalDistance() {
        Robot testSubject = new Robot(5, 5, 10);
        double result = testSubject.move(2, 2, 2);
        assertEquals(0, result);
        // 验证坐标:dx=2,x=5+2=7;dy=2,y=5+2=7
        assertEquals(7, testSubject.x);
        assertEquals(7, testSubject.y);
    }
}

参数化测试简化写法

如果希望减少重复代码,可使用参数化测试批量覆盖所有场景:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.*;

class RobotTest {

    @ParameterizedTest
    @CsvSource({
            // 初始x, 初始y, dx, dy, 地形类型, 预期x, 预期y
            "5, 5, 2, 2, 0, 9, 9",
            "5, 5, 3, 3, 1, 6, 6",
            "5, 5, 2, 2, 2, 7, 7",
            "0, 0, 5, 7, 1, 2, 3" // 额外覆盖奇数dx、dy的整数除法场景
    })
    void move_allScenarios_returnCorrectResult(int initialX, int initialY, int dx, int dy, int terrainType, int expectedX, int expectedY) {
        Robot testSubject = new Robot(initialX, initialY, 10);
        double result = testSubject.move(dx, dy, terrainType);
        assertEquals(0, result);
        assertEquals(expectedX, testSubject.x);
        assertEquals(expectedY, testSubject.y);
    }
}

内容的提问来源于stack exchange,提问作者Joose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:36:04