当前位置: 首页 > 知识库问答 >
问题:

具有ConditionalOnProperty和自动连线成员的java引导模拟

丌官利
2023-03-14

我有一个物体看起来像这样:

@Service
@ConditionalOnProperty(
        name="name",
        havingValue = "true"
)
public class MyClass{

    @Autowired(required = false)
    private SomeObject someObject;
}

我的测试文件里有这个:

@ExtendWith({SpringExtension.class})
@ContextConfiguration(classes = {MyClass.class}, loader = AnnotationConfigContextLoader.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class MyTest {

    MyClass myClass;

    @Autowired
    @ConditionalOnProperty(
            name = "name",
            havingValue = "true"
    )
        static MyClass getMyClass(){
        return new MyClass();
    }
}

    @MockBean
    static SomeObject someObject;

    @BeforeAll
    public void before() {
        myClass = MyTest.getMyClass()
        when(someObject.someFunc()).thenReturn(1);
    }
}

我之所以使用这个函数,是因为仅仅在SomeObject上使用@Autowired和@MockBean由于@ConditionalOnProperty而不起作用。

问题是在MyClass中,某些对象为空。

共有1个答案

蔚学真
2023-03-14

无需使用静态 MyClass 获取MyClass() 使用:

@ExtendWith({SpringExtension.class})
@ContextConfiguration(classes = {MyClass.class, SomeObject.class, loader = AnnotationConfigContextLoader.class)
@SpringBootTest(properties = "name=true")
public class MyTest{
@Autowired
MyClass
@Autowired myClass;
SomeObject someObject;
}
 类似资料:
  • 我的配置类: BeanTest等级: BeanWebClient类: 我的用户类别: 最后,我的服务类: 我试图了解组件和自动布线依赖项在spring boot中是如何工作的。在我的User类中,autowired BeanTest类在配置过程中被初始化-执行所有必要的打印语句。但是,当我调用服务类的函数时,自动连线用户依赖项对于beanTest及其成员为null。与此相反,当我在我的用户类中创建

  • 我正在运行一个使用logback的Spring Boot应用程序。其思想是将日志消息发送到RabbitMQ服务器。为了实现这一点,我创建了一个扩展ch.qos的appender。向后退。果心附录基。 这是我的回程Spring。xml文件: 一切都好。但是,在MessagingAppenderLogback中,我希望用来发送消息的RabbitTemboard为空。 根据留档,我知道"日志系统在应用程

  • 我很难弄清楚如何使用适当的模板化参数调用setValue函数。在ParameterBase抽象基类中不可能有模板化的参数。非常感谢任何帮助。 附注。我没有使用boost::any的灵活性。

  • 我对从类扩展的Spring bean初始化有一个问题。我完全卡住了。 类hiearchy如下所示: 提到该类对需要初始化的服务很有用: 创建bean时: 则中的为null-似乎没有自动连线。 它能否与是从抽象类扩展而来的这一事实相联系? 这个bean可能从未初始化过... 这是个例外: org.springframework.beans.factory.UnsatisfiedDependencyE

  • 从'@角/核'导入{Inject table};从'rxjs/行为主体'导入{行为主体}; @可注入({providedIn:'root'})导出类数据服务{ 私人目标=新行为主体([“初始目标]);goal=this.goals.asObservable(); 构造函数(){} } 我无法运行,因为工具提示中出现如下错误:[ts]模块“c:/Users/Admin/free_project/co

  • 我在Windows 10上用的是PyCharm 2016.1和Python 2.7,导入了matplotlib模块。 由于matplotlib模块非常广泛,而且我对Python相对陌生,我希望PyCharm中的自动完成功能可以帮助我了解对象的现有属性/功能。这将更方便,因为每次都要查阅api文档,而不知道要查找什么以及在哪里可以找到它。 例如: 当我输入< code>ax时。属性、功能等没有自动完