Java 测试:开发者框架与工具

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java 测试:框架与工具概览



高质量的测试是专业 Java 开发中不可或缺的一部分。没有自动化测试,就很难维护大型项目、引入新功能以及避免回归错误。在本文中,我们将介绍用于测试 Java 应用程序的关键工具和框架:从单元测试到集成测试和 UI 自动化。



为什么测试 Java 代码很重要?

测试可以:

  • 在开发早期发现错误。
  • 简化重构——您可以立即看到哪些地方出了问题。
  • 记录代码的行为。
  • 在每次提交时自动检查回归。


JUnit 5 —— 单元测试的基础

JUnit 5 是 Java 中模块化测试的事实标准。它由三个模块组成:JUnit Platform、JUnit Jupiter 和 JUnit Vintage。Jupiter 提供了一种新的编程模型,包含注解和扩展。



使用 JUnit 5 的基本测试示例:

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

class CalculatorTest { @Test void testAddition() { Calculator calc = new Calculator(); assertEquals(5, calc.add(2, 3), "2 + 3 应该等于 5"); }}


Mockito —— 创建桩和模拟对象

在测试中,通常需要将类与其依赖项(数据库、外部 API)隔离开来。Mockito 允许您创建模拟对象并定义其行为。



将 Mockito 与 JUnit 5 结合使用的示例:

import org.junit.jupiter.api.Test;import org.junit.jupiter.api.extension.ExtendWith;import org.mockito.InjectMocks;import org.mockito.Mock;import org.mockito.junit.jupiter.MockitoExtension;import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)class UserServiceTest { @Mock private UserRepository repository;

@InjectMocks private UserService service;

@Test void testFindUser() { when(repository.findById(1L)).thenReturn(new User("Alice")); User result = service.findUser(1L); assertEquals("Alice", result.getName()); verify(repository).findById(1L); }}


TestNG —— 具有扩展功能的 JUnit 替代方案

TestNG(下一代测试)是一个受 JUnit 启发的框架,但增加了对测试组、参数化、依赖关系和并行执行的支持。它在大型项目和集成测试中特别受欢迎。



TestNG 中的参数化测试示例:

import org.testng.annotations.DataProvider;import org.testng.annotations.Test;import static org.testng.Assert.assertEquals;

public class ParamTest { @DataProvider(name = "numbers") public Object[][] data() { return new Object[][] { {1, 2, 3}, {0, 0, 0}, {-1, 1, 0} }; }

@Test(dataProvider = "numbers") public void testAdd(int a, int b, int expected) { assertEquals(a + b, expected); }}


Selenium —— Web 界面自动化

对于测试 Java Web 应用程序(例如基于 Spring Boot 的),通常使用 Selenium WebDriver。它可以模拟用户在浏览器中的操作:点击、输入文本、检查元素。



Selenium 测试的最小示例:

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.junit.jupiter.api.Test;

public class LoginTest { @Test public void testLoginPage() { WebDriver driver = new ChromeDriver(); driver.get("https://example.com/login"); driver.findElement(By.id("username")).sendKeys("admin"); driver.findElement(By.id("password")).sendKeys("pa

推荐