栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

我发现这是弹簧控制器测试的最小设置,它需要自动连接的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="alice@test.org"          ...    /></dataset>

DbClean.xml:

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/635823.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号