[junit5 入门系列教程-24-junit5 拓展实体-测试上下文(Test Context)

目录

测试上下文

@TestTemplate方法只能在注册至少一个TestTemplateInvocationContextProvider时执行。

每个这样的提供者都负责提供TestTemplateInvocationContext实例流。

每个上下文可以指定一个自定义显示名称和一个附加扩展列表,这些扩展只用于@TestTemplate方法的下一次调用。

实例

下面的示例展示了如何编写测试模板以及如何注册和实现TestTemplateInvocationContextProvider。

  • MyTestTemplateInvocationContextProvider.java
public class MyTestTemplateInvocationContextProvider implements TestTemplateInvocationContextProvider {
    @Override
    public boolean supportsTestTemplate(ExtensionContext context) {
        return true;
    }

    @Override
    public Stream<TestTemplateInvocationContext> provideTestTemplateInvocationContexts(ExtensionContext context) {
        return Stream.of(invocationContext("foo"), invocationContext("bar"));
    }

    private TestTemplateInvocationContext invocationContext(String parameter) {
        return new TestTemplateInvocationContext() {
            @Override
            public String getDisplayName(int invocationIndex) {
                return parameter;
            }

            @Override
            public List<Extension> getAdditionalExtensions() {
                return Collections.singletonList(new ParameterResolver() {
                    @Override
                    public boolean supportsParameter(ParameterContext parameterContext,
                            ExtensionContext extensionContext) {
                        return parameterContext.getParameter().getType().equals(String.class);
                    }

                    @Override
                    public Object resolveParameter(ParameterContext parameterContext,
                            ExtensionContext extensionContext) {
                        return parameter;
                    }
                });
            }
        };
    }
}
  • testTemplate()
@TestTemplate
@ExtendWith(MyTestTemplateInvocationContextProvider.class)
void testTemplate(String parameter) {
    assertEquals(3, parameter.length());
}
  • 执行说明

在本例中,将调用两次测试模板。
调用的显示名称将是调用上下文指定的“foo”和“bar”。每个调用都注册一个自定义参数解析器,用于解析方法参数。
使用 ConsoleLaunche 时的输出如下:

└─ testTemplate(String) ✔
   ├─ foo ✔
   └─ bar ✔

TestTemplateInvocationContextProvider扩展API主要用于实现不同类型的测试,这些测试依赖于重复调用类似测试的方法,
尽管是在不同的上下文中—例如,使用不同的参数,以不同的方式准备测试类实例,或者多次不修改上下文。

系列导航

系列导航

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Junit 5 是一个流行的 Java 单元测试框架,它提供了一套功能强大且易于使用的工具,用于编写和执行单元测试。Spring MVC 是 Spring 框架中的一个模块,用于开发基于 MVC(Model-View-Controller)架构的 Web 应用程序。 在使用 Junit 5 进行 Spring MVC 的单元测试时,你可以通过以下步骤来进行配置和编写测试代码: 1. 添加 Junit 5 和 Spring MVC 的相关依赖到你的项目中。这包括 junit-jupiter、spring-test 等库。 2. 创建一个测试类,并使用 `@ExtendWith(SpringExtension.class)` 注解来启用 Spring 支持。 3. 使用 `@WebMvcTest` 注解标记测试类,以指定要测试的控制器或控制器类。 4. 使用 `@Autowired` 注解将需要进行测试的 Spring Bean 注入到测试类中。 5. 使用 Junit 5 提供的断言方法,如 `assertEquals`、`assertNotNull` 等,编写测试方法来验证你的控制器的行为和输出结果。 以下是一个简单的例子: ```java import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @ExtendWith(SpringExtension.class) @WebMvcTest(YourController.class) public class YourControllerTest { @Autowired private MockMvc mockMvc; @Test public void testYourController() throws Exception { mockMvc.perform(MockMvcRequestBuilders.get("/your-endpoint")) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().string("Expected Result")); } } ``` 在这个例子中,我们使用 `@WebMvcTest` 注解指定了要测试的控制器类 `YourController`,并使用 `MockMvc` 对象来模拟发送 HTTP 请求和验证响应。 当你运行这个测试类时,它将启动一个 Spring 上下文,并使用指定的控制器类进行测试。你可以编写更多的测试方法来覆盖不同的场景和逻辑。 希望这个例子能够帮助你开始使用 Junit 5 进行 Spring MVC 的单元测试。如果有任何进一步的问题,请随时提问!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值