gpt4 book ai didi

java - 如何为具有 Autowiring 依赖项的类创建模拟 spring bean

转载 作者:行者123 更新时间:2023-11-30 10:55:17 25 4
gpt4 key购买 nike

假设我有一个名为 MainClass 的类。

public class MainClass {
@Autowired
AutoWiredClass autoWiredClass;
}

我正在尝试使用 Mockito 创建 MainClass 的模拟 bean。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class AutowiringTest {
@Configuration
static class AutowiringTestConfiguration{

@Bean
public MainClass mainClass() {
return Mockito.mock(MainClass.class);
}
}

@Autowired
MainClass mainClass;

@Test
public void testBeanCreation(){
assertNotNull(mainClass);
}
}

我在运行测试用例时遇到此错误。

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: autowiring.AutoWiredClass autowiring.MainClass.autoWiredClass; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [autowiring.AutoWiredClass] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我知道我可以使用@Mock 和@InjectMocks 实现这一点。但这不是我想要的解决方案。

我的要求是创建 MainClass 的模拟 bean,而不创建 AutowiredClass 的实际 bean。请帮助我如何实现这一目标。

最佳答案

正如 Florian 已经评论过的,您应该尝试创建根本不需要 Spring 的测试,这样您就不会遇到这些问题。

但是,如果没有可行的解决方法,您可以对 AutoMockRegistryPostProcessor 使用一些魔法.

您只需将 AutoMockRegistryPostProcessor 添加到 @ContextConfiguration 中,它将为您缺少的依赖项创建模拟:

@ContextConfiguration(classes = { AutowiringTest.class, AutoMockRegistryPostProcessor.class })
public class AutowiringTest {
// no complains anymore, a mockito mock will be created for AutoWiredClass

AutoMockRegistryPostProcessor 类不在 maven 中,您需要将其复制到您的项目中。

文件是here .

关于java - 如何为具有 Autowiring 依赖项的类创建模拟 spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33391268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com