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

Spring引导应用测试策略建议

宋弘壮
2023-03-14

我有一个简单的Spring Boot Application结构,如下所示

src/main/java
com
 +- example
     +- myproject
         +- Application.java
         |
         +- config
         |   +- SpringConfig.java
         |
         +- service
         |   +- DBService.java

src/main/test
com
 +- example
     +- myproject
         +- config
         |   +- MyTestRoot.java

src/test/resources
applicationContext-test.xml

pplication.java注释为

@SpringBootApplication
@EnableJms
@ComponentScan
@EnableTransactionManagement
@EnableAutoConfiguration

SpringConfig。java用@Configuration注释,并有一个返回DBService新实例的方法。该方法用@Bean注释

@Bean
public DBService dbService() {
    return new DBService();
}

DBService类中包含了自动加载的存储库。这些存储库来自另一个项目依赖项,并提供到RDBMS/数据存储的连接。

我在applicationContext测试中定义了一个bean。xml

<bean id="dbService" class="com.path.to.class.in.dependency"/>

当我在测试类中自动连接dbService时,我得到一个错误“创建名称为‘dbServices’的bean时出错:自动连接依赖项的注入失败;”

我做错了什么?我使用的是spring boot 1.3.5,无法使用@SpringBootTest注释,因为它从1.4开始就可以使用。任何帮助都将不胜感激。

编辑:由于DbService类反过来引用存储库类(UserRepository、customerRepository等),所以我也尝试在测试上下文文件中为这些存储库定义bean。然而,我在DbService类(主要)中注入的存储库是接口,Spring Boot框架会在运行时自动为我解析实际的实现。我不确定如何在测试环境中做到这一点。

共有2个答案

钮高朗
2023-03-14

我发现以下帖子对我有用:http://tuhrig.de/inject-mocks-with-springs-contextconfiguration/

我的问题是我想在我的测试中使用DbService。但是DbService依赖于外部包依赖关系中的其他bean,这些bean在运行时由Spring解决。我设置了一个ServiceMockProvider类,该类返回DbService使用的所有自动构建bean的Mock。我创建了一个用@ContextConfigance注释的基本测试类,并在类属性中提供了DbService类和ServiceMockProvider类。我所有的测试类都扩展了这个基类,我可以开始测试了。

希望这对某人有帮助。感谢托马斯·乌里格的帖子。

满俊楠
2023-03-14

Spring Boot不会自动从XML文件导入bean。使用@importeBeans在源配置上创建一个XML注释类。

顺便问一下,为什么要在XML文件中创建这些bean?只需为他们使用@Configuration类,并保持简单。

此外,当您使用@SpringBootApplication时,您不需要:

  • @EnableAutoConfigsion
  • @EnableComponentScan

它们是多余的。请参阅@SpringBootApplication源代码,了解它到底引入了哪些注释。

 类似资料:
  • Ansible Playbooks 的集成测试 很多时候, 人们问, “我怎样才能最好的将 Ansible playbooks 和测试结合在一起?” 这有很多选择. Ansible 的设计实际上是一个”fail-fast”有序系统, 因此它可以很容易地嵌入到 Ansible playbooks. 在这一章节, 我们将讨论基础设施的集成测试及合适的测试等级. Note 这是一个关于测试你部署应用程序

  • 综述 富因特网应用程序(Rich Internet Applications, RIA)应该遵循Adobe的 crossdomian.xml 策略来控制跨域访问数据和使用服务,例如Oracle Java,Siverlight和Adobe Flash。因此,一个域名授予另一个不同域名远程访问自己的服务的能力。但是,这些策略文件中描述的访问控制被糟糕配置。糟糕的策略配置会导致跨站点伪造请求攻击(CSR

  • 我不明白在springboot应用程序中如何正确地编写websocket测试用例。我有一个实现的类,我在中添加了这个处理程序: 但是当我写下下面的测试用例时,我得到了一个例外: 异常::发起WebSocket连接的HTTP请求失败 如果我将(结尾斜杠)它可以工作,但不工作。 我做错了什么?

  • 像组件一样,服务通常需要依赖,Angular通过服务类的构造函数注入。由于我们在Angular的引导过程之外初始化这些类,我们必须自己显式注入这些依赖。这是通过使用TestBed配置测试模块传回所需的依赖项(如HTTP模块)来实现的。

  • 要从访问,我使用了一个带注释的接口,名为,该接口在需要时是。如果两者都在运行,则该服务将被Eureka发现。这对于所有服务都在运行的类似生产的设置很好。 但现在我想对我的的一些特性进行单元测试。启动一个测试服务并不成问题 就像我在中所做的那样。问题是Eureka依赖于我的的发现...因此我的testclass崩溃,因为自动执行的-实例不工作。 我能告诉Spring使用一个伪造的实例来进行测试吗?还

  • 我们正在介绍Google Play订阅,其中包括30天的试用,我正在寻找一些关于如何测试的建议。 然而,当我试图创建一个新的Google帐户进行另一轮测试时,Google告诉我,我的电话号码(这是强制验证步骤)已经被使用了太多次,所以我不能再用这个号码创建任何帐户了。 我很难相信这是唯一/最好的测试免费试用Google Play的方法,所以我很高兴能得到任何关于如何最好的方法的帮助。