Spring boot JPA存储库的Junit测试用例

Spring boot JPA存储库的Junit测试用例,spring-boot,junit,mockito,Spring Boot,Junit,Mockito,我是junit新手,我有一个存储库,如下所示: @Repository public interface ChartRepository extends JpaRepository<Chart, Integer>{ } @Entity @Table(name = "Chart") public class Chart { @Column(name = "ENT_ID") private String entID; @Column(name = "ent_

我是junit新手,我有一个存储库,如下所示:

@Repository
public interface ChartRepository extends JpaRepository<Chart, Integer>{
}
@Entity
@Table(name = "Chart")
public class Chart {

    @Column(name = "ENT_ID")
    private String entID;

    @Column(name = "ent_NAME")
    private String entName;

    @Column(name = "ent_PRODUCER_ID")
    private String entProducerId;

    @Id
    @Column(name = "ent_Rc_ID")
    @SequenceGenerator(name = "ent_RC_ID_SEQ", sequenceName="ent_RC_ID_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ent_RC_ID_SEQ")
    private Integer entReceiveId;

    @Column(name = "JOB_ID")
    private Integer jobId;

    @Column(name = "CREATE_DT")
    private Timestamp createdDate;

  //getters and Setters
}

现在,我们可以为repository类编写测试用例了。如果是这样的话,我们该怎么做。谁能给我推荐一些代码示例。

您可以创建一个
@DataJpaTest
@Autowire
存储库。例如:

@RunWith(SpringRunner.class)
@DataJpaTest
public class MyJpaTest {

    @Autowired
    private ChartRepository chartRepository;

    @Test
    public void myTest() {
        ...
    }

}

更多信息请参见此:

我强烈建议使用内存中的任何数据库来测试JPA存储库,不要使用Mockito、EasyMock等模拟测试框架。在Dao层中,不应该有任何业务逻辑来模拟。它应该是简单的读/写操作

我用H2数据库来做这个

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
      classes = {DatabaseConfig.class},
      loader = AnnotationConfigContextLoader.class)
public class ChartRepositoryTest { 

  @Autowired
  private ChartRepository cartRepository;

  @Test 
  public void testfind() {
     // do find , insert and validate the response
  } 
}


testCompile('com.h2database:h2:1.4.196')
这是wha数据库配置文件的外观

@Configuration
@EnableJpaRepositories(basePackages = "com.mypackage.repository")
@PropertySource("application-test.properties")
@EnableTransactionManagement
public class DatabaseConfig {

@Autowired
private Environment env;

@Bean
public DataSource dataSource() {
  DriverManagerDataSource dataSource = new DriverManagerDataSource();

dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
  dataSource.setUrl(env.getProperty("jdbc.url"));
  dataSource.setUsername(env.getProperty("jdbc.user"));
  dataSource.setPassword(env.getProperty("jdbc.pass"));

  return dataSource;
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
  LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
  em.setDataSource(dataSource());
  em.setPackagesToScan(new String[] { "com.mypackage.v2" });
  JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
  em.setJpaVendorAdapter(vendorAdapter);
  em.setJpaProperties(additionalProperties());

  return em;
}

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

  return transactionManager;
}

Properties additionalProperties() {
  Properties properties = new Properties();
  properties.setProperty("hibernate.hbm2ddl.auto", "create");
  properties.setProperty("hibernate.dialect","org.hibernate.dialect.H2Dialect");
  return properties;
 }
}