使用 Kotlin 在 Spock 中模拟 @ConfigurationProperties 不起作用
Mocking @ConfigurationProperties in Spock with Kotlin not work
我正在尝试使用 Spock 和 ConfigurationProperties。
但是在我的单元测试中,Mocking @ConfigurationProperties 对我不起作用。
属性Class
@ConfigurationProperties(prefix = "jwt")
@ConstructorBinding
class JwtProperties(
val secretKey: String,
val accessTokenExp: Long,
val refreshTokenExp: Long
) {
companion object {
const val TOKEN_PREFIX = "Bearer "
const val TOKEN_HEADER_NAME = "Authorization"
const val ACCESS_VALUE = "access"
const val REFRESH_VALUE = "refresh"
}
}
测试Class
class JwtTokenProviderTest extends Specification {
private JwtProperties jwtProperties = GroovyMock(JwtProperties)
private AuthDetailsService authDetailsService = GroovyMock(AuthDetailsService)
private JwtTokenProvider jwtTokenProvider = new JwtTokenProvider(authDetailsService, jwtProperties)
def "AuthenticateUser Success"() {
given:
jwtProperties.getSecretKey() >> "asdfdsaf"
jwtProperties.getAccessTokenExp() >> 100000
def bearerToken = jwtTokenProvider.getAccessToken("email").accessToken
def accessToken = jwtTokenProvider.parseToken(bearerToken)
authDetailsService.loadUserByUsername("email") >> new AuthDetails(new User())
when:
jwtTokenProvider.authenticateUser(accessToken)
then:
noExceptionThrown()
.
.
.
但是当我 运行 使用调试模式进行测试时,JwtProperties 的字段从未初始化。
您的应用程序中的 JwtProperties 由 spring 实例化。 Spring 将读取属性文件中的值,然后创建具有所需值的实例。
在您的测试中,您没有任何 spring 上下文,因此不会为您创建任何 JwtProperties。此外,你在嘲笑它。我认为嘲笑这个没有意义,因为您只需要创建具有您想要的值的实例。
就这样:
class JwtTokenProviderTest extends Specification {
private JwtProperties jwtProperties = JwtProperties("my-secret", 60, 120)
private AuthDetailsService authDetailsService = GroovyMock(AuthDetailsService)
private JwtTokenProvider jwtTokenProvider = new JwtTokenProvider(authDetailsService, jwtProperties)
我正在尝试使用 Spock 和 ConfigurationProperties。
但是在我的单元测试中,Mocking @ConfigurationProperties 对我不起作用。
属性Class
@ConfigurationProperties(prefix = "jwt")
@ConstructorBinding
class JwtProperties(
val secretKey: String,
val accessTokenExp: Long,
val refreshTokenExp: Long
) {
companion object {
const val TOKEN_PREFIX = "Bearer "
const val TOKEN_HEADER_NAME = "Authorization"
const val ACCESS_VALUE = "access"
const val REFRESH_VALUE = "refresh"
}
}
测试Class
class JwtTokenProviderTest extends Specification {
private JwtProperties jwtProperties = GroovyMock(JwtProperties)
private AuthDetailsService authDetailsService = GroovyMock(AuthDetailsService)
private JwtTokenProvider jwtTokenProvider = new JwtTokenProvider(authDetailsService, jwtProperties)
def "AuthenticateUser Success"() {
given:
jwtProperties.getSecretKey() >> "asdfdsaf"
jwtProperties.getAccessTokenExp() >> 100000
def bearerToken = jwtTokenProvider.getAccessToken("email").accessToken
def accessToken = jwtTokenProvider.parseToken(bearerToken)
authDetailsService.loadUserByUsername("email") >> new AuthDetails(new User())
when:
jwtTokenProvider.authenticateUser(accessToken)
then:
noExceptionThrown()
.
.
.
但是当我 运行 使用调试模式进行测试时,JwtProperties 的字段从未初始化。
您的应用程序中的 JwtProperties 由 spring 实例化。 Spring 将读取属性文件中的值,然后创建具有所需值的实例。
在您的测试中,您没有任何 spring 上下文,因此不会为您创建任何 JwtProperties。此外,你在嘲笑它。我认为嘲笑这个没有意义,因为您只需要创建具有您想要的值的实例。
就这样:
class JwtTokenProviderTest extends Specification {
private JwtProperties jwtProperties = JwtProperties("my-secret", 60, 120)
private AuthDetailsService authDetailsService = GroovyMock(AuthDetailsService)
private JwtTokenProvider jwtTokenProvider = new JwtTokenProvider(authDetailsService, jwtProperties)