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

Spring Boot测试中的EntityManagerFactory Bean

裴俊智
2023-03-14

我是编程界的新手,所以我说的话可能看起来很傻。

我试图在Eclipse下作为JUnit运行一个spring-boot测试,但我只是不知道如何使用spring-boot注释...我已经阅读了几个指南和浏览了这个网站,但没有找到任何解决我的问题。

我正在尝试运行下面的JUnit测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={CBusiness.class,CService.class,CDao.class}, loader = AnnotationConfigContextLoader.class)
@SpringBootTest
public class CalculTest {

@Autowired
    CBusiness business;

@Test
    public void testCalcul() throws TechnicalException {
        Object object= new Object();
        object.setId1("00");
        object.setId2("01");
        object.setNombrePlacesMaximum(new BigInteger("50"));
        Long result=business.calcul(object);
        assertTrue(result>0);
    }
java.lang.IllegalStateException: Failed to load ApplicationContext 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cDao': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available 
@Component("cBusiness")
public class CBusiness {
    @Autowired
    CService cService;

public long calcul(Object object) throws TechnicalException {
//Code (calls a method from CService class)
}
@Service
public class CService {
    @Autowired
    CDao cDao;
@Repository
@Transactional(rollbackFor = {TechnicalException.class})
public class CDao {

    @PersistenceContext
    EntityManager entityManager;

提前谢了。

共有1个答案

贺浩漫
2023-03-14
@Configuration
@EnableTransactionManagement
public class PersistenceJPAConfig{

   @Bean
   public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
      LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
      em.setDataSource(dataSource());
      em.setPackagesToScan(new String[] { "\\your package here" });

      JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
      em.setJpaVendorAdapter(vendorAdapter);
      em.setJpaProperties(additionalProperties());

      return em;
   }

   @Bean
   public DataSource dataSource(){
      DriverManagerDataSource dataSource = new DriverManagerDataSource();
      dataSource.setDriverClassName("\\Driver");
      dataSource.setUrl("\\URL");
      dataSource.setUsername( "\\userName" );
      dataSource.setPassword( "\\password" );
      return dataSource;
   }

   @Bean
   public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
      JpaTransactionManager transactionManager = new JpaTransactionManager();
      transactionManager.setEntityManagerFactory(emf);

      return transactionManager;
   }
 类似资料:
  • 在使用JUnit进行测试时,我无法理解一些事情,我编写了一些测试,而有些测试似乎可以简单地使用 而且 有些似乎不能与它们一起工作,所以我必须使用 而且 我理解@mockbean是在处理spring容器时使用的,而@mock只是用来复制/模拟某个类及其方法。但是什么时候才是使用@mockbean的最佳时机呢? 上面是我在spring boot应用程序中为一个控制器编写的测试,但当我使用@mock模拟

  • 需要对项目的控制器部分进行单元测试,但却得到了错误。我相信ModelAndVIew部分导致了这个问题,尽管我曾经嘲弄过它并返回ModelAndVIew,因为它是方法的返回类型。然而,它并不起作用。pom.xml没有任何问题,因此没有添加它。ProjectController: java.lang.IllegalStateException:找不到@SpringBootConfiguration,您

  • 我正在尝试编写一个单元测试到一个自定义反序列化器,该反序列化器是使用一个带有@了的构造函数来实例化的,并且我的实体标有@JsonDesri的。它在我的集成测试中工作得很好,其中MockMvc会带来Spring serverside。 然而,在调用objectMapper.read值(…)的测试中,使用不带参数的默认构造函数的反序列化器的新实例被实例化。即使 实例化有线版本的反序列化程序,实际调用仍

  • 与@mockbean和@spybean一样,有没有类似于@fakebean/@dummybean的东西? 其思想是,该实例是100%真实的(具有预期的生产内部状态),并且它覆盖(或者添加bean,以防在配置中没有声明)上下文中的bean。理想情况下,您不需要创建TestConfiguration类并将其设置为Primary,因为这样可以在每个测试的基础上控制假冒,只有在需要时才可以。否则它使用主的

  • 我有一个生成屏幕截图的类: 我的应用程序是用创建的,我需要对它进行测试。但我得到 我的测试: 我试图防止无头异常: 我使用的是spring启动版本1.5.6。 但这无济于事。我得到日志: java.awt.HeadlessException在sun.awt.HeadlesStoolKit.GetScreenSize(headlesStoolKit.java:284)在org.robinhood.i

  • 我在我的SpringBoot应用程序“demo”中使用了注释样式的Resilience4j。当通过RestTemplate调用外部后端时,我希望使用TimeLimiter并重试以实现以下目标: 将REST调用持续时间限制在5秒-->如果需要更长时间,则使用TimeoutException失败 在TimeoutException上重试-->最多尝试2次 为了查看弹性设置的配置是否如设计的那样工作,我