gpt4 book ai didi

java - 如何在集成测试中模拟 Spring HandlerInterceptorAdapter?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:20 25 4
gpt4 key购买 nike

假设我有一些 FooInterceptor:

public class FooInterceptor extends HandlerInterceptorAdapter {
// ...
}

在上下文中配置:

 <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="my.package.FooInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>

我正在为某个 Controller 创建集成测试:

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = "/context.xml")
@ActiveProfiles("test")
public class SomeControllerIT {

@Autowired
private WebApplicationContext webApplicationContext;

private MockMvc mockMvc;

@Before
public void setup() {
mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
.apply(springSecurity())
.build();
}

...
}

我试图通过创建自定义配置来模拟它:

@Configuration
static class Config {

@Bean
@Primary
public FooInterceptor getFooInterceptor() {
return mock(FooInterceptor.class);
}
}

但在我看来它并没有起作用。实际的 FooInterceptor 仍在生成并参与测试。

如何正确模拟它?

最佳答案

您可以按照 Luana FM 在上一个答案中的建议进行以下操作。此外,您还需要一行模拟代码,以在 @BeforeEach block 中将拦截器的响应返回为 true

        @BeforeEach
public void before() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders
.standaloneSetup(controller)
.addInterceptors(interceptor)
.build();
when(interceptor.preHandle(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(true);

}

关于java - 如何在集成测试中模拟 Spring HandlerInterceptorAdapter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49474778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com