项目测试之MockMvc

基础

基础概念

定义:
	是Spring框架提供的一种用于测试Spring MVC控制器的工具,它允许开发者在不启动完整的web服务器的情况下,模拟HTTP请求并验证响应。

优点:
	执行速度快 --》 不需要启动web服务器;
	便于集成 --》 可以与JunitTestNG等测试框架无缝衔接;
	强大的功能 --》  对HTTP请求的详细配置和响应的全面验证;

依赖配置:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

Mockxxx

MockMvc:
	来自于:
		import org.springframework.test.web.servlet.MockMvc;
	定义:
		是Spring Test模块的一部分,它允许开发者对Spring MVC控制器进行单元测试而无需启动完整的Web服务器;通过MockMvc,可以模拟HTTP请求并验证响应,使得测试执行速度更快,同时便于与JUnitTestNG等测试框架集成。
	使用:
		使用mockMvc。perform()模拟HTTP请求,使用.andExpect().andReturn()等方法进行响应验证。
Mockito:
	来自于:
		import org.mockito.Mockito;
	定义:
		流行的Java单元测试框架,专门用于创建和验证模拟对象的行为。它允许开发者在编写测试时模拟外部依赖,从而使得测试更便捷,减少对外部类、系统和依赖给单元测试带来的耦合。
	特点:
		行为验证、测试桩、参数匹配器、注册支持、监控真实对象、重置mock对象;
MvcResult:
	来自于:
		import org.springframework.test.web.servlet.MvcResult;
	定义:
		是在执行模拟HTTP请求以测试控制器(Controller)层功能时的重要概念,它代表一个完整的HTTP响应结果,包括响应的状态码、头信息、响应体以及任何可能产生的错误等。
	作用:
		封装HTTP响应 -》封装由模拟的HTTP产生的完整响应信息;
		获取响应细节 -》包括响应的状态码、头信息、响应体等内容;
		断言测试 -》 使用MvcResult中的方法进行断言,确保控制器返回正确的HTTP状态码和数据;

文件位置

与项目目录保持一致;
假设项目文件为
	src/main/java/xxx/controller/xxxController
测试类项目文件为
	src/test/java/xxx/controller/xxxTest

注解

🍎@RunWith
🍇@RunWith(MockitoJUnitRunner.class)JUnit 测试框架中的一个注解,用于指定测试运行器(Test Runner)。
	它的作用是将 Mockito 框架与 JUnit 集成起来,从而简化 Mock 对象的创建和管理。
	案例:
	@RunWith(MockitoJUnitRunner.class)
	public class MyServiceTest {
   
   
	
	    @Mock
	    private MyDependency mockDependency;
	
	    @InjectMocks
	    private MyService myService;
	
	    @Test
	    public void testMethod() {
   
   
	        when(mockDependency.someMethod()).thenReturn("Mocked Value");
	        String result = myService.callDependency();
	        assertEquals("Mocked Value", result);
	    }
	}
🍇@RunWith(PowerMockRunner.class)PowerMock 框架提供的一个测试运行器,用于扩展 Mockito 或其他 Mock 框架的功能。
	PowerMock 支持更高级的 Mock 能力,例如对静态方法、私有方法、构造函数等进行 Mock。
	案例:
	@RunWith(PowerMockRunner.class)
	@PrepareForTest(MyClassWithStaticMethod.class) // 指定需要 Mock 的类
	public class MyStaticMethodTest {
   
   
	
	    @Test
	    public void testStaticMethod() throws Exception {
   
   
	        PowerMockito.mockStatic(MyClassWithStaticMethod.class);
	        when(MyClassWithStaticMethod.staticMethod()).thenReturn("Mocked Static Value");
	
	        String result = MyClassWithStaticMethod.staticMethod();
	        assertEquals("Mocked Static Value", result);
	    }
	}
🍇@RunWith(SpringRunner.class)
	用于 Spring 集成测试,结合 Spring TestContext 框架加载 Spring 上下文。
	加载 Spring 配置文件或注解配置。
	支持依赖注入(@Autowired)。
	支持事务管理(@Transactional)。
	案例:
	@RunWith(SpringRunner.class)
	@SpringBootTest
	public class MySpringBootTest {
   
   
	
	    @Autowired
	    private MyService myService;
	
	    @Test
	    public void testService() {
   
   
	        String result = myService.performAction();
	        assertNotNull(result);
	    }
	}
🍇@RunWith(Parameterized.class)
	用于参数化测试,允许为同一个测试方法提供多组输入数据。
	案例:
	@RunWith(Parameterized.class)
	public class ParameterizedTest {
   
   
	
	    @Parameterized.Parameters
	    public static Collection<Object[]> data() {
   
   
	        return Arrays.asList(new Object[][] {
   
   
	            {
   
    1, 2, 3 },
	            {
   
    4, 5, 9 },
	            {
   
    6, 7, 13 }
	        });
	    }
	
	    private int a;
	    private int b;
	    private int expected;
	
	    public ParameterizedTest(int a, int b, int expected) {
   
   
	        this.a = a;
	        this.b = b;
	        this.expected = expected;
	    }
	
	    @Test
	    public void testAddition() {
   
   
	        assertEquals(expected, a + b);
	    }
	}
🍇@RunWith(Cucumber.class)
	用于行为驱动开发(BDD)测试,结合 Cucumber 框架编写基于 Gherkin 语言的测试用例。
	解析 .feature 文件中的测试步骤。
	将自然语言描述的测试用例映射到 Java 方法。
	案例:
	@RunWith(Cucumber.class)
	@CucumberOptions(features = "src/test/resources/features")
	public class CucumberTest {
   
   
	}
🍇@RunWith(JUnitParamsRunner.class)
	类似于 Parameterized,但提供了更灵活的参数化测试方式。
	支持多种数据源(数组、文件、数据库等)。
	更简洁的语法。
	案例:
	@RunWith(JUnitParamsRunner.class)
	public class 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值