温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java junit能测哪些代码

发布时间:2026-10-13 08:19:09 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

Java 的 JUnit 主要用于对 Java 代码进行单元测试,理论上只要是可以被 Java 调用的代码,基本都可以用 JUnit 来测,但适合程度和测试方式不同。下面按“能测什么 / 怎么测 / 注意事项”来说明。


一、JUnit 最常见可测的代码

1️⃣ 普通 Java 类 / 工具类

✅ 最适合

public class MathUtil {
    public static int add(int a, int b) {
        return a + b;
    }
}

测试:

@Test
void testAdd() {
    assertEquals(3, MathUtil.add(1, 2));
}

✅ 特点:

  • 无外部依赖
  • 执行快
  • 最容易写单测

2️⃣ Service / 业务逻辑层

✅ 非常推荐

public class OrderService {
    public int calcTotal(int price, int count) {
        return price * count;
    }
}

✅ 适合测试:

  • 业务规则
  • 条件分支
  • 边界情况

3️⃣ 带依赖的类(用 Mock)

✅ 可以测,但需要 Mock(如 Mockito)

@Service
public class UserService {
    @Autowired
    private UserRepository repo;

    public User getUser(int id) {
        return repo.findById(id);
    }
}

测试:

@ExtendWith(MockitoExtension.class)
class UserServiceTest {
    @Mock UserRepository repo;
    @InjectMocks UserService service;

    @Test
    void testGetUser() {
        when(repo.findById(1)).thenReturn(new User("Tom"));
        assertEquals("Tom", service.getUser(1).getName());
    }
}

✅ 适合:

  • Spring Service
  • Controller 调用链
  • 外部依赖解耦

4️⃣ Controller(接口层)

⚠️ 能测,但一般不直接用 JUnit 打

方式一:MockMvc

@WebMvcTest(UserController.class)
class UserControllerTest {
    @Autowired MockMvc mockMvc;
}

方式二:集成测试(@SpringBootTest)

✅ 适合:

  • 请求参数校验
  • 返回结构
  • 异常处理

5️⃣ DAO / Repository(数据库)

✅ 可以测,但属于集成测试

  • 用 @DataJpaTest
  • 用 H2 内存数据库
@DataJpaTest
class UserRepositoryTest {
    @Autowired UserRepository repo;
}

✅ 适合:

  • SQL 正确性
  • 映射关系

❌ 不属于“纯单元测试”


6️⃣ 静态方法 / 工具方法

✅ 可以测
⚠️ 静态方法难 Mock(需用 PowerMock 或重构)


7️⃣ 异常逻辑

✅ 非常推荐

@Test
void testException() {
    assertThrows(IllegalArgumentException.class,
        () -> MathUtil.div(1, 0));
}

二、JUnit 不擅长 / 不适合测的

❌ 前端页面(HTML / JS) ❌ UI 交互(用 Selenium) ❌ 性能测试(用 JMH) ❌ 并发正确性(难稳定) ❌ 第三方系统真实行为(支付、短信)


三、一句话总结

JUnit 能测:Java 中任意可调用代码
✅ 最适合:无依赖、逻辑清晰的代码
✅ 可测:Service / Controller / DAO(配合 Mock 或 Spring)
❌ 不适合:UI、性能、真实外部系统

如果你愿意,可以告诉我:

  • 你用的是 JUnit 4 还是 5
  • 你想测的是 哪一层代码

我可以给你具体示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手