在春季测试期间如何制作CrudRepository接口的实例?

在春季测试期间如何制作CrudRepository接口的实例?,第1张

在春季测试期间如何制作CrudRepository接口的实例?

我发现这是d簧控制器测试的最小设置,它需要自动连接的JPA存储库配置(使用带有嵌入式spring 4.1.4.RELEASE的spring-boot
1.2和DbUnit 2.4.8)。

该测试针对嵌入式HSQL DB运行,该数据库在测试开始时由xml数据文件自动填充。

测试类:

@RunWith( SpringJUnit4ClassRunner.class )@ContextConfiguration( classes = { TestController.class,  RepoFactory4Test.class } )@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class,     DirtiesContextTestExecutionListener.class,     TransactionDbUnitTestExecutionListener.class } )@DatabaseSetup( "classpath:FillTestData.xml" )@DatabaseTearDown( "classpath:DbClean.xml" )public class ControllerWithRepositoryTest{    @Autowired    private TestController myClassUnderTest;    @Test    public void test()    {        Iterable<EUser> list = myClassUnderTest.findAll();        if ( list == null || !list.iterator().hasNext() )        { Assert.fail( "No users found" );        }        else        { for ( EUser eUser : list ) {     System.out.println( "Found user: " + eUser ); }        }    }    @Component    static class TestController    {        @Autowired        private UserRepository myUserRepo;                public Iterable<EUser> findAll()        { return myUserRepo.findAll();        }    }}

笔记:

  • @ContextConfiguration批注仅包含嵌入式TestController和JPA配置类RepoFactory4Test。

  • 需要@TestExecutionListeners批注,以便后续批注@DatabaseSetup和@DatabaseTearDown生效

引用的配置类:

@Configuration@EnableJpaRepositories( basePackageClasses = UserRepository.class )public class RepoFactory4Test{    @Bean    public DataSource dataSource()    {        EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();        return builder.setType( EmbeddedDatabaseType.HSQL ).build();    }    @Bean    public EntityManagerFactory entityManagerFactory()    {        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();        vendorAdapter.setGenerateDdl( true );        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();        factory.setJpaVendorAdapter( vendorAdapter );        factory.setPackagesToScan( EUser.class.getPackage().getName() );        factory.setDataSource( dataSource() );        factory.afterPropertiesSet();        return factory.getObject();    }    @Bean    public PlatformTransactionManager transactionManager()    {        JpaTransactionManager txManager = new JpaTransactionManager();        txManager.setEntityManagerFactory( entityManagerFactory() );        return txManager;    }}

UserRepository是一个简单的界面:

public interface UserRepository extends CrudRepository<EUser, Long>{}

EUser是一个简单的@Entity注释类:

@Entity@Table(name = "user")public class EUser{    @Id    @Column(name = "id")    @GeneratedValue(strategy = GenerationType.AUTO)    @Max( value=Integer.MAX_VALUE )    private Long myId;    @Column(name = "email")    @Size(max=64)    @NotNull    private String myEmail;    ...}

FillTestData.xml:

<?xml version="1.0" encoding="UTF-8"?><dataset>    <user id="1"          email="[email protected]"          ...    /></dataset>

DbClean.xml:

<?xml version="1.0" encoding="UTF-8"?><dataset>    <user /></dataset>


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5641688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存