进行 spring 云合同测试时无法找到 @SpringBootConfiguration

Unable to find a @SpringBootConfiguration when doing spring cloud contract test

我有一个 spring 作为生产者的启动项目,它有 API 个端点,通过 RouterFunction 创建。

API 调用服务然后调用 JPA 存储库的端点调用处理程序。

我们使用 liquibase 创建数据库表,并使用 postgressql testcontainer 编写测试用例。

我已经为制作人编写了基础 class 如下:

@SpringBootTest
public abstract class RestBase extends TestBase {

    @Autowired
    private AccountHandler accountHandler;

    @BeforeEach
    public void setup() {
        RestAssuredWebTestClient.webTestClient(WebTestClient.bindToRouterFunction(
                new RouterConfig(accountHandler).routes()).build());

    }
}

但是,当我尝试 运行 mvn clean install 时,出现以下堆栈跟踪。

[INFO] Running com.example.RestTest
2021-09-02 13:46:26.207  INFO 25420 --- [           main] .b.t.c.SpringBootTestContextBootstrapper : Neither @ContextConfiguration nor @ContextHierarchy found for test class [com.example.RestTest], using SpringBootContextLoader
2021-09-02 13:46:26.208  INFO 25420 --- [           main] o.s.t.c.support.AbstractContextLoader    : Could not detect default resource locations for test class [com.example.RestTest]: no resource found for suffixes {-context.xml, Context.groovy}.
2021-09-02 13:46:26.208  INFO 25420 --- [           main] t.c.s.AnnotationConfigContextLoaderUtils : Could not detect default configuration classes for test class [com.example.RestTest]: RestTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.127 s <<< FAILURE! - in com.example.RestTest
[ERROR] com.example.RestTest  Time elapsed: 0.127 s  <<< ERROR!
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
2021-09-02 13:46:26.346  INFO 25420 --- [           main] c.e.e.c.ContainerEnvironmentResource     : Stopping all test containers.
2021-09-02 13:46:26.778  INFO 25420 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2021-09-02 13:46:26.781  INFO 25420 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2021-09-02 13:46:26.795  INFO 25420 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
[INFO] 
[INFO] Results:
[INFO] 
[ERROR] Errors: 
[ERROR]   RestTest » IllegalState Unable to find a @SpringBootConfiguration, you need to...

如何解决这个问题?我的基础测试有问题吗class?

路由器配置 class 如下所示:

@Configuration
@RequiredArgsConstructor
public class RouterConfig {

    private final AccountHandler accountHandler;

    @Bean
    public RouterFunction<ServerResponse> routes (){
        return route()
                .GET("/accounts",accountHandler::retrieveAccountByFilter)
                .build();
    }
}

我的意思是错误消息中的字面意思是您应该做什么。只需在@SpringBootTest 注解中提供配置 class 即可。同样对于合同测试,您不应该启动任何数据库或存储库。你应该嘲笑他们。

确保您正在测试的 classes 与您的 @SpringBootApplication class 在同一个命名空间中,或者在包含您的 @SpringBootApplication 的命名空间下的命名空间中] class.

例如,如果您的应用 class 在 com.example.demo.MyApplication 但您正在测试的 class 是 com.example.MyClass S

或者如果它们需要位于单独的命名空间树中,您可以尝试将应用列表 class 添加到您的 @SpringBootTest 注释中,例如

@SpringBootTest(classes=YouAppClassName.class)
public abstract class RestBase extends TestBase {
 ...
}