我试图使用以下方法设置一些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。通过 默认情况下,它将配置内存中的嵌入式数据库,扫描 @Entity类并配置Spring Data JPA存储库。定期 @Component bean不会加载到ApplicationContext中。
我不太确定为什么@Service类应被视为JPA测试不需要,但我试图通过将其注释为@Repository来强制解决此问题,但无济于事。
我可以使用@Import(...)手动加载该类,但它似乎有点诡异。有没有更好的方法告诉DataJpaTest我需要测试什么?
答案 0 :(得分:0)
我引用了DataJpaTest documentation,您可以在其中找到问题的答案。
可以与之结合使用的注释 @RunWith(SpringRunner.class)进行典型的JPA测试。可以用的时候 测试只关注JPA组件。
使用此注释将禁用完全自动配置 仅应用与JPA测试相关的配置。
默认情况下,使用@DataJpaTest注释的测试将使用嵌入式 内存数据库(替换任何显式或通常自动配置 数据源)。 @AutoConfigureTestDatabase注释可用于 覆盖这些设置。
如果您要加载完整的应用程序配置,但是 使用嵌入式数据库,你应该考虑@SpringBootTest的组合 使用@AutoConfigureTestDatabase而不是此注释。