我发现这是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="alice@test.org" ... /></dataset>
DbClean.xml:
<?xml version="1.0" encoding="UTF-8"?><dataset> <user /></dataset>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)