【问题标题】:Is it good practice to have separate @SpringBootApplication for (junit) test and how为(junit)测试单独使用@SpringBootApplication 是一种好习惯吗?
【发布时间】:2017-03-09 04:53:26
【问题描述】:

我有一个初始设置为MySQL 的 Spring Boot 应用程序,到目前为止一切顺利。但是现在我正在尝试使用 H2 数据库为 JPA / DAO layer 创建更多单元测试。

我看到几个在线演示,在 Spring 中使用applicationContext-test 来测试上下文设置是很常见的做法。

在 Spring boot 1.4 中还是不错的做法吗?

@SpringBootApplication(scanBasePackages = {...})
public class ApplicationTest extends SpringBootServeltIntializer{
    ....
}

由于目前没有单独的 xml 文件保存用于测试的上下文,上面看起来是一个好的解决方案吗?还有,当应用程序启动时,所有用于测试的上下文也需要加载到内存中,这对性能有影响吗?

这是否意味着我需要在测试源中创建一个application.properties? Spring Boot 背后有很多隐含的过程,但我找不到太多关于 Spring Boot 中测试的 DAO 层设置的文本解释,所以任何指导方针都值得赞赏。

【问题讨论】:

  • Spring Boot 支持(单元)测试,请参阅 Spring Boot 参考文档中的40. Testing

标签: spring jpa junit spring-boot


【解决方案1】:

我的偏好是根本不使用 Spring 进行 JUnit 测试。

根据定义,JUnit 测试应该是关于对单个类进行单元测试。 Spring 是一个满足依赖关系的 DI 引擎。使用真正的依赖打破了单元测试的想法;对于那些我手动注入模拟的人。

我这样做是为了将测试限制在单个类中。我发现创建 Spring 工厂和所有应用程序 bean 需要很长时间。当我有很多单元测试时,我不想付出那个代价。将 Spring 排除在外使我的测试运行得更快。

【讨论】:

  • 谢谢,那是一阵清新的空气。但是,如果 DAO / JPA / Persistence 都依赖于 Spring 框架,如何在没有 Spring 上下文的情况下进行 junit 测试?只是通过 JDBC API?
  • 在没有关系数据库的情况下测试 DAO 是没有意义的,但对于那些我需要的只是一个 java.sql.DataSource。我可以使用简单的 DriverManagerDataSource 创建一个。 JPA 和 ORM 对我来说是不必要的。如果你使用这些,你会得到我的同情。
  • 我同意这一点。所以更好的是我将创建一个连接类来测试 DAO 层。听起来不错:)
猜你喜欢
  • 2012-03-01
  • 1970-01-01
  • 2011-01-06
  • 2019-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 2019-03-06
相关资源
最近更新 更多