0x1*_*C1B 3 java spring spring-data-jpa spring-boot spring-boot-test
让我们假设一个自定义的基本JpaRepository实现如下所示。
public class SimpleCustomJpaRepository<T, ID extends Serializable> extends SimpleJpaRepository<T, ID> implements CustomJpaRepository<T, ID> {
@Override
public List<T> findAllCustom() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
基础存储库是使用@EnableJpaRepositories注释注册的。
@EnableJpaRepositories(value = "org.somebody.repository", repositoryBaseClass = SimpleCustomJpaRepository.class)
Run Code Online (Sandbox Code Playgroud)
UserRepository我应该如何为扩展接口配置集成测试CustomJpaRepository,并因此应该使用自定义基本实现?
public interface UserRepository extends CustomJpaRepository<User, Long> { ... }
Run Code Online (Sandbox Code Playgroud)
当前使用的集成测试失败并显示org.springframework.data.mapping.PropertyReferenceException: No property findAllCustom found for type User!。实际上,它无法加载,ApplicationContext因为我的自定义基础存储库实现在集成测试期间未注册,因此未findAllCustom找到 的实现。
@ExtendWith(SpringExtension.class)
@DataJpaTest
class UserRepositoryTest {
@Autowired
private UserRepository userRepository.
}
Run Code Online (Sandbox Code Playgroud)
JpaRepository我应该如何结合 JPA 存储库集成测试来注册自定义实现?
我仍然无法解释问题的原因,但是手动配置JPA已经解决了我的问题。
@TestConfiguration
@EnableAutoConfiguration(exclude = {JpaRepositoriesAutoConfiguration.class})
@EnableJpaRepositories(value = "org.somebody.repository", repositoryBaseClass = SimpleCustomJpaRepository.class)
public class JpaTestConfig {
...
}
Run Code Online (Sandbox Code Playgroud)
我刚刚在测试中导入了这个额外的配置类,它的工作方式就像一个魅力。
@ExtendWith(SpringExtension.class)
@DataJpaTest
@Import(JpaTestConfig.class)
class UserRepositoryTest {
@Autowired
private UserRepository userRepository.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1597 次 |
| 最近记录: |