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

@DataJpaTest未加载所需的类

鲜于宜修
2023-03-14

我正在尝试使用以下方法设置一些Spring Boot JPA测试:

package biz.ianw.coindatabase.test;

@RunWith(SpringRunner.class)
@DataJpaTest     
public class DbTests {
  @Test
  public void test1() { ... }
}

我有一个服务类:

package biz.ianw.coindatabase.database;

//@Service
@Repository
@Transactional(readOnly=false)
public class CoinDbService { ... }

和一个应用程序:

package biz.ianw.coindatabase;

@SpringBootApplication
@Slf4j
@Configuration
@EnableEncryptableProperties
public class Main {
  @Autowired
  CoinDbService dbService;
... }

开始测试会出现错误:

biz.ianw.coindatabase.Main中的字段dbService需要类型为“biz.ianw.coindatabase.database.CoinDbService”的bean,但找不到。

我认为,这与启动期间加载的bean@DataJpaTest的类型有关:

@如果要测试JPA应用程序,可以使用DataJpaTest。默认情况下,它将配置内存中的嵌入式数据库,扫描@实体类并配置Spring数据JPA存储库。常规@组件bean将不会加载到ApplicationContext中。

我不太清楚为什么JPA测试不需要@Service类,但我试图强行将其注释为@Repository,但没有效果。

我可以手动加载类与@导入(...),但它似乎有点逃学。有没有更好的方法告诉DataJpaTest我需要什么测试?

共有1个答案

胡弘毅
2023-03-14

我引用DataJpaTest留档,你可以找到你的问题的答案。

可以与@RunWith(SpringRunner.class)结合使用的注释,用于典型的JPA测试。当测试只关注JPA组件时可以使用。

使用此注释将禁用完全自动配置,而是仅应用与JPA测试相关的配置。

默认情况下,带有@DataJpaTest注释的测试将使用嵌入式内存数据库(替换任何显式或通常自动配置的数据源)。@AutoConfigureTestDatabase注释可用于覆盖这些设置。

如果您希望加载完整的应用程序配置,但使用嵌入式数据库,那么应该考虑将@SpringBootTest与@AutoConfigureTestDatabase结合使用,而不是使用此注释。

 类似资料:
  • 我想用DataJpaTest注释测试我的服务层。我的设置如下:SpringBoot 2.0.0-M7、JAVA 9和pom xml: 这是我真正简单的测试单元: 但我总是遇到同样的问题 mvn依赖项:树:

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

  • 我正在尝试在Spring Boot项目中加载应用程序属性进行测试。我也在使用@DataJpaTest注释。许多人建议使用@TestProperty tySource注释与@datajpaTest的组合,但它不是加载属性。如果我使用@SpringBooTest,它就是加载属性。 我的应用程序属性文件位于主/资源/文件夹中。如果我使用,它正在工作,但我有 这未能使用Spring启动测试进行自动配置。我

  • 出于性能的考虑,我们会对模块和组件进行按需加载。 按需加载组件 通过 umi/dynamic 接口实现,比如: import dynamic from 'umi/dynamic'; const delay = (timeout) => new Promise(resolve => setTimeout(resolve, timeout)); const App = dynamic({ loa

  • 一个可能有高级答案的简单问题。 问题是:我的问题是,有没有办法在应用程序上下文中仅实例化特定JUnit测试所需的类? 原因:我的应用程序上下文变得相当大。我还做了很多集成测试,所以当我说每次我运行测试时,我的应用程序上下文中的所有类都会被实例化,这需要时间。 示例: 说类Foo注入只有酒吧 但是应用程序上下文有bean foobar和bar。我知道这不是一个有效的应用程序上下文,但rest确保我的

  • 梯度依赖性: FileNotFoundException: File:/C:/用户/用户/. gradle/缓存/模块-2/files-2.1/fop/fop/0.20.5/ffa9d8eb84897746aa196d3f3336d034ddb26f59/xercesImpl-2.2.1.jar fop jar确实没有xercesImpl-2.2.1.jar。代码使用org.apache.fop.