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

用于单元测试的Spring/Hibernate Autowire非JPA存储库

易骁
2023-03-14

但是有没有一种方法可以用我的SQL存储库做同样的事情,并让EntityManger对测试数据库执行nativeQuery呢?

我还没弄明白。

共有1个答案

萧辰沛
2023-03-14

如果希望使用spring boot对内存中的DB执行命名查询,可以使用@datajpatest注释。

这相当简单:

1)在pom.xml中包含必要的依赖项

     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <version>1.5.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>test</scope>
        <version>1.4.194</version>
    </dependency>
@RunWith(SpringRunner.class)
@DataJpaTest
@ContextConfiguration(classes = InCaseYouWantConfigurationConfig.class)
public class TestDemo {
@Autowired
private UserRepository userRepository;

@Autowired
private TestEntityManager entityManager;
@Test
public void testNoDb() {

    User user = new User();
    user.setFirstName("First Name");
    user.setLastName("Last name");
    user.setUsername("username");
    user.setPassword("password");
    user.setEmail("user@email.com");
    this.userRepository.save(user);

    Query q = this.entityManager.getEntityManager().createQuery("SELECT u From User u WHERE u.username = :username",
            User.class);
    q.setParameter("username", "username");
    User foundUser = (User) q.getSingleResult();

    Assert.assertEquals("user@email.com", foundUser.getEmail());
}
 类似资料:
  • 我有一个Spring Data JPA存储库,只要不添加Spring Security性依赖项(spring-boot-starter-security)并在存储库上添加相应的方法授权注释,单元测试就可以正常工作。添加后,在运行单元测试时,我会得到一个AuthenticationCredentialsNotFound异常。 如何在单元测试中“验证”对存储库方法的调用?

  • 我在玩spring数据存储库,有一个关于编写CRUD测试的问题。我针对Hibernate DAO和EJB3实体bean编写了许多CRUD测试,在这些测试中,我创建和实体,将其刷新到数据库中,清除实体管理器,并按ID读回它。实体管理器被清除,因此第一级缓存不会在读取时被击中。 使用spring数据存储库,我找不到一种方法来清除测试使用的底层实体管理器,这样我的读取就不会返回到实际的数据库,使我的测试

  • 我有一个应用程序,使用经典的Spring配置与xml,它可以使用Spring启动仅用于单元测试? 像这样:

  • 我正在为我的服务编写单元测试。 当应用程序运行时,每次进入方法A都会创建一个新的事务。而是在单元测试执行期间——当test testMethod进入时。所以方法A不会创建新的。为了进行正确的测试,我需要在每次调用内部测试服务之前清除缓存。我不想在每个单元测试中的任何服务调用之前编写Session.clear()。这里的最佳实践是什么?

  • 我正在使用Spring Boot进行多模块项目。我想编写一些单元测试来检查我的存储库,服务等。存储库代码是在公共项目上编写的,而公共项目在其他项目上使用。此项目不包含任何初学者应用。它只是由实体、存储库和服务组成。 我看到这个主题(如何使用Spring Boot测试Maven模块项目)关于类似的问题,但我没有设法成功地实现它来测试我的存储库。 当我启动测试时,EntityARepository会引

  • Spring对MockMvc有2个设置: 独立设置 WebApplication Context安装 一般来说,MockMvc用于哪种测试?单元还是集成?或者两者兼而有之? 使用独立设置(运行在Spring应用程序上下文之外)允许您编写单元测试,而使用WebApplication Context设置您可以编写集成测试,这是对的吗?