【问题标题】:Spring Boot with spring-boot-starter-data-jpa in unit test needs mandatory @DataJpaTest单元测试中带有 spring-boot-starter-data-jpa 的 Spring Boot 需要强制 @DataJpaTest
【发布时间】:2018-03-01 20:22:55
【问题描述】:

作为该领域的新手,我正在测试 Spring Boot 功能。我有一个具有基本依赖项的简单应用程序。

  • sping-boot-starter-parent 1.5.7
  • sping-boot-starter
  • sping-boot-starter-data-jpa
  • sping-boot-starter-test

然后是带有@SpringBootApplication 注释的简单应用程序类。 然后我有一个带有 @Service 注释的简单 DummyService 。 然后我用一个@Test 方法和@RunWith(SpringRunner.class)@SpringBootTest 注释创建了一个简单的测试DummyServiceTest。

@SpringBootTest 是关键问题。使用 spring-boot-starter-data-jpa 依赖,这个注解测试甚至需要 @DataJpaTest 注解。没有它,即使测试不需要使用数据,框架也无法解决 HibernateJpaAutoConfigurationDataSource 或其他注入依赖项。

我能以某种方式压制它吗?我不是任何一种 Spring 专家,所以我的猜测是有一些简单的配置可以解决这个问题。

附:好的,回到树上。即使使用@DataJpaTest,该测试也无法解决数据依赖性。我尝试添加@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE),它也不起作用。我尝试添加@Transactional,结果相同。这有点太荒谬了。

【问题讨论】:

    标签: java spring jpa spring-boot spring-data-jpa


    【解决方案1】:

    如果您还没有使用 JPA,请从 build.gradle 中注释/删除依赖项,直到您使用 JPA。在 Hibernate 和/或 JPA 配置成功完成之前,您需要定义数据源和其他配置详细信息。在 @SpringApplicationConfiguration 代码运行时,每个应用程序依赖都会得到解决,即使您当前的“hello world”测试不需要 JPA 数据。

    我当前的单元测试实际上已经注释掉了@SpringBootTest。以下是在我的应用的 JPA 相关测试中如何设置和工作的简化视图:

    @RunWith(SpringJUnit4ClassRunner)
    @SpringApplicationConfiguration(classes = DaemonApplication)
    @ActiveProfiles('local')
    //@SpringBootTest
    @Transactional
    public abstract class AbstractJpaTest extends AbstractTransactionalJUnit4SpringContextTests { 
        @BeforeTransaction
        public void setupData() throws Exception {
            deleteFromTables('User', 'User_Session', 'User_Handshake');
        }
    }
    

    然后

    class UserHandshakeRepositoryIntegrationTest extends AbstractJpaTest {
    
    @Autowired UserHandshakeRepoImpl handshakeRepository;    
    
    
    @Test
    public void testSave() {
        UserHandshake handshake = handshakeRepository.save(new UserHandshake());
        assertThat(handshake.getId(), is(notNullValue()));
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 2021-01-18
      • 2021-02-09
      • 2017-11-29
      • 2019-01-23
      • 2018-08-06
      • 2021-07-08
      • 2018-03-01
      • 2016-06-21
      相关资源
      最近更新 更多