如何在集成测试中自动装配包私有类而不使用@SpringBootTest

问题描述 投票:0回答:0

我的应用程序中有一个依赖项/库。库中类的源代码如下。

JwtService.java接口:

package com.jwt.accesstoken;

import java.util.concurrent.CompletableFuture;

public interface JwtService {
    CompletableFuture<String> jwtToken(String var1);
}

JwtServiceImpl.java:

package com.jwt.accesstoken;

import java.util.concurrent.CompletableFuture;
import org.springframework.stereotype.Component;

@Component
class JwtServiceImpl implements JwtService {
      public CompletableFuture<String> acquireToken(String serviceName) {
          //implementation
      }
      ....

集成测试(JwtServiceGeneratorTest.kt):

@SpringJUnitConfig(JwtService::class)
//@SpringBootTest - this solves compilation error but takes too much time to run test
@ActiveProfiles("it-test")
class JwtServiceGeneratorTest {

    @Autowired
    private lateinit var jetService: JwtService //compilation error
    ....

我想使用

JwtService.java
在我的集成测试中自动装配
@SpringJUnitConfig
。并且
JwtServiceImpl.java
在依赖项中不是公开的。

如何在集成测试中自动装配 JwtService.java (应该在运行时调用

JwtServiceImpl.java
)而不使用
@SpringBootTest

如果我这样做

@SpringJUnitConfig(JwtService::class)
那么集成测试会抱怨没有可以自动装配的 JwtService.java 类型的 bean。 我无法做到
@SpringJUnitConfig(JwtService::class, JwtServiceImpl::class)
因为 JwtServiceImpl 是包私有的。

注意:如果我使用

@SpringBootTest
那么代码可以工作,但它会加载整个应用程序上下文,这对于此测试来说不是必需的,并且需要太多时间。

java spring-boot kotlin junit5 spring-test
© www.soinside.com 2019 - 2024. All rights reserved.