我有一个使用 Spring Boot、Gradle 和 Kotlin 构建的应用程序,它与 Kafka 和 PostgreSQL 连接。我正在使用它resources/application.yml作为配置文件。\n我想为每种测试创建一个特定的包:单元、集成和端到端,但现在我有一个仅用于单元测试的包。做这个的最好方式是什么?我正在使用 Junit5。
我想要这样的东西:
\napplication/\n\xe2\x94\x9c\xe2\x94\x80 src/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 e2e/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 integration/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 main/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 test/\nbuild.gradle.kts\ngradlew\ngradlew.properties\nsettings.gradle.kts\nRun Code Online (Sandbox Code Playgroud)\n另外,我希望在运行单元测试时我的应用程序不要连接到 Kafka 或 Postgres,但在运行集成测试时我希望它这样做。我怎样才能做到这一点?
\n我尝试了 Kafka 的配置,但没有成功:
\napplication/\n\xe2\x94\x9c\xe2\x94\x80 src/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 e2e/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 integration/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 main/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 test/\nbuild.gradle.kts\ngradlew\ngradlew.properties\nsettings.gradle.kts\nRun Code Online (Sandbox Code Playgroud)\n我还创建了一个注释来模拟所有 Kafka 消费者和生产者(这有效,但我不想在每个测试类中添加此注释)
\nspring\n autoconfigure:\n exclude: org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration\nRun Code Online (Sandbox Code Playgroud)\n我的消费者看起来像这样:
\n@MockBeans(MockBean(MyConsumer::class), MockBean(MyProducer::class))\nannotation class MockKafka\n\n@SpringBootTest\n@MockKafka\nclass MyAwesomeTest { // tests here }\nRun Code Online (Sandbox Code Playgroud)\n我的 application.yaml 文件如下所示:
\n@Component\nclass MyConsumer() {\n private val logger = …Run Code Online (Sandbox Code Playgroud)