当前位置: 首页 > 面试题库 >

如果我只想测试JdbcTemplate代码,则@DataJpaTest等效吗?

颜君浩
2023-03-14
问题内容

Spring Boot
1.4提供了一些出色的测试改进。一种是@DataJpaTest注释,其中仅将JPA测试所需的零件连接起来。仅连接JdbcTemplate测试所需零件的等效外观会是什么样?

我很好地构建了自己的模拟注解的复合注解@DataJpaTest


问题答案:

好问题。具有讽刺意味的是,昨天在SpringOne Platform的测试讨论中提出了这个问题。让我们看看实现这样的专用测试注释需要什么。

TL;DR 检查github上的代码

首先,您需要创建注释。该注释重用了spring-boot-test- autoconfigure模块中的一些位。您可能想要自动配置内存数据库(就像DataJpaTest这样)。您还想确保默认情况下配置和禁用了缓存(以防您@EnableCaching在Spring
Boot应用程序中使用缓存)。您还希望所有测试@Transactional默认为默认,因此应添加它。

接下来,您希望有效地进行切片。此时,您需要做的是a DataSource,a JdbcTemplate数据库迁移(flyway /
liquibase)和要处理的事务管理器@Transactional。为了避免其他自动配置启动,您应该添加以下内容:

@OverrideAutoConfiguration(enabled = false)

然后,您要显式启用上面的自动配置。为此,您添加,@ImportAutoConfiguration并在其中添加以下内容META- INF/spring.factories

# AutoConfigureDataJpa auto-configuration imports
com.example.test.autoconfigure.jdbc.DataJdbcTest=\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\      
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\    
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration

输入的密钥spring.factories应与注释的FQN相匹配。每当Spring
Boot发现@ImportAutoConfiguration没有额外的属性时,它将在中查找与注释类型匹配的键spring.factories

接下来,您希望能够包含带有过滤器的其他组件(组件扫描)。为此,您可以添加@TypeExcludeFilters(DataJdbcTypeExcludeFilter.class)where
DataJdbcTypeExcludeFilter几乎与之相同的东西DataJpaTypeExcludeFilter(因此我们可能要为此提取一个通用类)。

完成此操作后,只需添加注释,即可为您JdbcTemplate自动配置注释

@RunWith(SpringRunner.class)
@DataJdbcTest
public class DataJdbcSampleTests {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    ...
}


 类似资料:
  • 测试你的代码是非常重要的。 习惯于同时写测试用例和运行代码,现在被视为一个好的习惯。如果使用得当,这种方式将帮助你更加明确自己代码的功能,以及拥有更加可解耦的结构。 测试的通用规则: 测试单元应该集中于最小部分功能,并且证明它是正确的。 每个测试单元必须完全独立。他们都能够单独运行,也可以在测试套件中运行,而不用考虑被调用的顺序。 要想实现这个规则,测试单元应该加载最新的数据集,之后再做一些清理。

  • 在一个SpringBoot应用程序中,我想做一些关于存储库层的测试。 当我尝试从运行测试时,我得到一个关于的错误 com.norc.application中得字段defaultConfigService需要类型为“com.norc.service.defaultConfigService”得bean,但找不到该bean. 那么这需要运行吗? 我尝试在中放入的bean,但这是不允许的。 那该怎么管理

  • 我正在编写一组简单的PHP函数,我只使用纯PHP7,没有框架,什么都没有。这些函数稍后将在CMS中的插件中使用,但这不是重点。我想使用Codeception为我的函数编写单元测试(为了熟悉它,我知道Codeception基本上只在这里运行PHPUnit),但我真的不知道如何以合理的方式将Codeception指向我的代码。 我的结构如下:我有,其中包含我想要测试的函数,大致如下: 我使用Compo

  • 我有一个包含两个方法的类,每个方法都有一个try-catch块来查找任何异常。 代码如下: 我提出了一个测试用例,使用Mokito来测试上述场景,但不知道如何进入上述的catch块 我试图提出一个NullPointerException,但catch块仍然没有出现在CodeOverage中(我假设它没有经过测试)。请帮我写一个Junit测试用例来输入异常。我对所有这些话题都很陌生。

  • 我的程序对一些输入显示不正确的结果,对另一些输入显示正确的结果。我不知道我在代码中做错了什么。 在我的代码中,我想将一个字符串输入作为一个标签,如果它的每两个连续数字的和是偶数并且它的字母不是元音,那么它就是有效的。我认为字母“A”,“E”,“I”,“O”,“U”,“Y”是这个问题的元音。 输入格式:第一行包含一个长度为9的字符串。格式为“DDXDDD-DD”,其中D代表一个数字(非零),X为大写

  • nodejs,我想要运行特定的测试代码块,请问如何运行呢? 因为里面的测试代码很多,我想要选择运行部分代码,请问如何运行呢? 比如我想要运行这个it(xxx)部分代码,应该如何运行呢: