运行 使用 ApplicationContext 进行 JUnit 测试时禁用 Hazelcast 实例
Disable Hazelcast instance while running JUnit test with ApplicationContext
我有这样的 JUnit 5 测试,由于测试速度,我需要在 运行 测试时禁用创建 Hazelcast 实例。有什么方法可以针对某个特定测试禁用 Hazelcast 吗?
@SpringBootTest
@RunWith(SpringRunner.class)
class MemoryTradeCommunicatorTest {
// test cases....
}
您可以使用 @Import
仅加载所需的 bean 并像这样模拟您的 Hazelcast bean:
@RunWith(SpringRunner.class)
@Import(value = {MemoryTradeCommunicator.class})
@MockBean
private CacheManager cacheManager;
class MemoryTradeCommunicatorTest {
// test cases....
}
CacheManager 是您的 Hazelcast 实现。另外,不要忘记将其他需要的 bean 声明为 @Import
可以通过三种主要方法来解决您的问题。我假设您只需要禁用 Hazelcast 并且您正在使用 Spring Boot,尽管您没有明确提及它。
- 正如 Dmitrii 提到的,您可以模拟提供 Hazelcast 实例的 bean。请注意,您可能需要将配置拆分为多个片段,以便导入测试所需的 bean。
- 您可以使用 Spring 个配置文件。您需要创建一个
test
配置文件并在其中创建一个模拟 Hazelcast 实例。实现在很大程度上取决于您如何创建真正的 Hazelcast 实例(Spring 引导或手动)。
- Spring 由于自动配置 类,引导创建 Hazelcast 实例。您可以通过 excluding specific classes 来防止这种行为。在您的情况下,您将使用
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration
启动测试
我有这样的 JUnit 5 测试,由于测试速度,我需要在 运行 测试时禁用创建 Hazelcast 实例。有什么方法可以针对某个特定测试禁用 Hazelcast 吗?
@SpringBootTest
@RunWith(SpringRunner.class)
class MemoryTradeCommunicatorTest {
// test cases....
}
您可以使用 @Import
仅加载所需的 bean 并像这样模拟您的 Hazelcast bean:
@RunWith(SpringRunner.class)
@Import(value = {MemoryTradeCommunicator.class})
@MockBean
private CacheManager cacheManager;
class MemoryTradeCommunicatorTest {
// test cases....
}
CacheManager 是您的 Hazelcast 实现。另外,不要忘记将其他需要的 bean 声明为 @Import
可以通过三种主要方法来解决您的问题。我假设您只需要禁用 Hazelcast 并且您正在使用 Spring Boot,尽管您没有明确提及它。
- 正如 Dmitrii 提到的,您可以模拟提供 Hazelcast 实例的 bean。请注意,您可能需要将配置拆分为多个片段,以便导入测试所需的 bean。
- 您可以使用 Spring 个配置文件。您需要创建一个
test
配置文件并在其中创建一个模拟 Hazelcast 实例。实现在很大程度上取决于您如何创建真正的 Hazelcast 实例(Spring 引导或手动)。 - Spring 由于自动配置 类,引导创建 Hazelcast 实例。您可以通过 excluding specific classes 来防止这种行为。在您的情况下,您将使用
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration
启动测试