gpt4 book ai didi

java - Mockk - 模拟实现多个接口(interface)的最终类​​时出现 ClassCastException

转载 作者:行者123 更新时间:2023-11-30 01:57:01 55 4
gpt4 key购买 nike

我正在尝试使用这个 Java 类的模拟:

public final class HttpSecurity extends
AbstractConfiguredSecurityBuilder<DefaultSecurityFilterChain, HttpSecurity>
implements SecurityBuilder<DefaultSecurityFilterChain>,
HttpSecurityBuilder<HttpSecurity>

所以我创建了一个像这样的模拟:

private val httpSecurity: HttpSecurity = mockk(relaxed = true)

为了测试这段 Java 代码:

  protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().
headers().frameOptions().disable().and()
.formLogin().loginPage("/login").permitAll()....etc

当我尝试使用它时出现以下错误

java.lang.ClassCastException: org.springframework.security.config.annotation.web.HttpSecurityBuilder$Subclass2 cannot be cast to org.springframework.security.config.annotation.web.builders.HttpSecurity

此处测试类:

package com.whatever

import io.mockk.mockk
import io.mockk.mockkClass
import org.junit.jupiter.api.Test

import org.springframework.core.env.Environment
import org.springframework.security.authentication.AuthenticationManager
import org.springframework.security.config.annotation.web.builders.HttpSecurity

internal class SecurityConfigTest {


private val authManager: AuthenticationManager = mockk()
val env : Environment = mockk()
private val httpSecurity: HttpSecurity = mockk(relaxed = true)

val securityConfig : SecurityConfig = SecurityConfig(authManager,env)

@Test
fun configure() {
securityConfig.configure(httpSecurity)
}
}

有什么想法可以解决这个问题吗?

最佳答案

这里的问题是模板参数类型被删除并且无法恢复。唯一的解决方案是直接指定mock,以便reified类型捕获实际的类:

val mockk = mockk<HttpSecurity>(relaxed = true)
val csrf = mockk.csrf()
every { csrf.disable() } returns mockk(relaxed = true)
val disable = csrf.disable()
disable.headers()

关于java - Mockk - 模拟实现多个接口(interface)的最终类​​时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54073139/

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