DBUnit рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЯреЗрд╕реНрдЯрдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди

рд╕реНрдкреНрд░рд┐рдВрдЧ 2.5 рдореЗрдВ TestContext рдврд╛рдВрдЪреЗ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛрдб рдХрд╛ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдХреЗ рднреАрддрд░ рд▓реЗрдирджреЗрди рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди, рд╕рд╛рде рд╣реА рд╕рд╛рде JUnit рдФрд░ TestNG рдХреЗ рд▓рд┐рдП рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рдХрдХреНрд╖рд╛рдПрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ DBUnit рдХреЗ рд╕рд╛рде TestContext рдврд╛рдВрдЪреЗ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ , рдЬреЛ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдбреЛрдореЗрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╣реА рднрдВрдбрд╛рд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
@Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; ... 


рд╡рд╕реНрддреБ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ DAO:

 public class JpaPersonDao implements PersonDao { @PersistenceContext private EntityManager em; public void save(Person person) { em.persist(person); } } 


рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ DAO рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдореЗрдВ DAO, рдбреЛрдореЗрди рдСрдмреНрдЬреЗрдХреНрдЯ рдореИрдкрд┐рдВрдЧ рдФрд░ рджреГрдврд╝рддрд╛ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдкрд░реАрдХреНрд╖рдг рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдж рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рдВрджрд░реНрдн testContext.xml рдмрдирд╛рдПрдВ:

  <!--       @Transactional --> <tx:annotation-driven/> <!--     HSQLDB --> <jdbc:embedded-database id="dataSource" /> <!-- - --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence"/> <property name="dataSource" ref="dataSource"/> <property name="packagesToScan" value="ru.kacit.commons.test.dbunit"/> <!-- ,      --> <property name="jpaPropertyMap"> <map> <entry key="hibernate.show_sql" value="true"/> <entry key="hibernate.format_sql" value="true"/> <entry key="hibernate.hbm2ddl.auto" value="create"/> </map> </property> </bean> <!--    --> <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <!--  DAO --> <bean class="ru.kacit.commons.test.dbunit.JpaPersonDao" /> 


рдЕрдм JUnit рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЯреНрд░рд╛рдВрд╕реЗрдХреНрд╢рдирд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЯреЗрд╕реНрдЯ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рдПрдХ рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдмрдирд╛рддреЗ рд╣реИрдВред @ContextConfiguration рдПрдиреЛрдЯреЗрд╢рди рд╕рдВрджрд░реНрдн рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ (рд╕реНрдерд┐рдд, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрд▓рд╛рд╕рдкрд╛рде рдореЗрдВ) рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ @Autowired рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг DAO рдЗрдВрдЬреЗрдХреНрд╖рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

 @ContextConfiguration("classpath:testContext.xml") public class JunitDbunitTest extends AbstractTransactionalJUnit4SpringContextTests { @Autowired public PersonDao personDao; @Test public void test1() { personDao.save(new Person("")); personDao.save(new Person("")); personDao.save(new Person("")); } } 


рдмреЗрд╕ рдХреНрд▓рд╛рд╕ AbstractTransactionalJUnit4SpringContextTests рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдкрджреНрдзрддрд┐ рдХреЛ рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдПрдВрдЯрд┐рдЯреА рдореИрдирдЬрд░ рдХреЛ рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЕрднрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдбрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕рдХрд╛ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, DAO рд▓рд┐рдЦрддреЗ рд╕рдордп, рдпрд╣ рдорд╛рдирдЪрд┐рддреНрд░рдг рдФрд░ DAO рддрд░реНрдХ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд▓реЗрдирджреЗрди рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╢рд░реНрдд рдкреВрд░реА рдХреА рдЬрд╛рдПрдЧреАред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрдм рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓реЗрди-рджреЗрди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рдпрд╣ рдЬрд╛рдВрдЪреЗрдВ - рд╕реАрдзреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪреЗрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рднреМрддрд┐рдХреА рдХреЗ рд▓рд┐рдП рдХрд╕рдХрд░ рдкрд░реАрдХреНрд╖рд╛ рдХреЛ рдЯрд╛рдИ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рдирд╛рдордХрд░рдг рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рдХрд╛рд░рдг рдХрд┐рд╕реА рдЕрдиреНрдп рджреГрдврд╝рддрд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдкреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рдХрдХреНрд╖рд╛рдПрдВ рдХреЗрд╡рд▓ рдЯреЗрд╕реНрдЯ рдмреЗрд╕ рдкрд░ рдХреБрдЫ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ DBUnit рд╣рдорд╛рд░реА рдорджрдж рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЯреЗрд╕реНрдЯрдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

DBUnit рдЖрдкрдХреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдмрд┐рдирд╛ рднреМрддрд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ - рдПрдХ XML рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВред рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рд╕реЗрдЯ рд╣реИ: рдпрд╣ рдЦрд╛рд▓реА рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рдбреЛрдореЗрди рд╡рд░реНрдЧ рдХреЗ рдЕрдиреБрд░реВрдк рдПрдХрдорд╛рддреНрд░ рд╡реНрдпрдХреНрддрд┐ рддрд╛рд▓рд┐рдХрд╛ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

 <!DOCTYPE dataset SYSTEM "dataset.dtd"> <dataset> <table name="person"> <column>id</column> <column>name</column> </table> </dataset> 


рдФрд░ рдпрд╣рд╛рдБ рдЕрдкреЗрдХреНрд╖рд┐рдд рдбреЗрдЯрд╛рд╕реЗрдЯ рд╣реИ: рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рддреАрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВред

 <!DOCTYPE dataset SYSTEM "dataset.dtd"> <dataset> <table name="person"> <column>id</column> <column>name</column> <row> <value>1</value> <value></value> </row> <row> <value>2</value> <value></value> </row> <row> <value>3</value> <value></value> </row> </table> </dataset> 


рдпрд╣ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ DBUnit рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рднреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд╛рдо рдЯреИрдЧ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд╝реАрд▓реНрдб рдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреВрд░реНрдг рдЖрдХрд╛рд░ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИред

рдЖрдЗрдП рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдмрдирд╛рдПрдВ, рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ (рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдкрд╣рд▓реЗ) рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ (рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рдж):

 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface DbunitDataSets { String before(); String after(); } 


рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рдирдХ рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ AbstractTransactionalJUnit4SpringContextTests рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

 @TestExecutionListeners( AbstractDbunitTransactionalJUnit4SpringContextTests.DbunitTestExecutionListener.class ) public abstract class AbstractDbunitTransactionalJUnit4SpringContextTests extends AbstractTransactionalJUnit4SpringContextTests { /**  DBUnit */ private IDatabaseTester databaseTester; /**       */ private String afterDatasetFileName; /** ,      :   */ @AfterTransaction public void assertAfterTransaction() throws Exception { if (databaseTester == null || afterDatasetFileName == null) { return; } IDataSet databaseDataSet = databaseTester.getConnection().createDataSet(); IDataSet expectedDataSet = new XmlDataSet(ClassLoader.getSystemResourceAsStream(afterDatasetFileName)); Assertion.assertEquals(expectedDataSet, databaseDataSet); databaseTester.onTearDown(); } private static class DbunitTestExecutionListener extends AbstractTestExecutionListener { /** ,     :  */ public void beforeTestMethod(TestContext testContext) throws Exception { AbstractDbunitTransactionalJUnit4SpringContextTests testInstance = (AbstractDbunitTransactionalJUnit4SpringContextTests) testContext.getTestInstance(); Method method = testContext.getTestMethod(); DbunitDataSets annotation = method.getAnnotation(DbunitDataSets.class); if (annotation == null) { return; } DataSource dataSource = testContext.getApplicationContext().getBean(DataSource.class); IDatabaseTester databaseTester = new DataSourceDatabaseTester(dataSource); databaseTester.setDataSet( new XmlDataSet(ClassLoader.getSystemResourceAsStream(annotation.before()))); databaseTester.onSetup(); testInstance.databaseTester = databaseTester; testInstance.afterDatasetFileName = annotation.after(); } } } 


рд╕реНрдерд┐рд░ рдиреАрдбрд┐рдВрдд рд╡рд░реНрдЧ DbunitTestExecutionListener, TestContext рдврд╛рдВрдЪреЗ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ - рд╢реНрд░реЛрддрд╛ AbstractExecutionListener рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ рдкрд░ рдПрдиреЛрдЯреЗрд╢рди @TestExecutionListeners рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред

рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЬреАрд╡рди рдЪрдХреНрд░ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред рдкрд╣рд▓реА DbunitTestExecutionListener #TestMethod рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рддреА рд╣реИред рдЗрд╕рдореЗрдВ, рд╢реНрд░реЛрддрд╛ рд╣рдорд╛рд░реЗ @DbunitDataSets рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдкрд░ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░реАрдХреНрд╖рдХ рдХреЛ DBUnit рдврд╛рдВрдЪреЗ рд╕реЗ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо @DbunitDataSets рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдкрд╣рд▓реЗ рдлрд╝реАрд▓реНрдб рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдиреЛрдЯреЗрд╢рди рдФрд░ рдкрд░реАрдХреНрд╖рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдорд╛рди рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рджреВрд╕рд░рд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдПрд╕реЗрдЯрдЕрдЯрд░рдЯреНрд░рд╛рдВрд╕рдиреЗрд╢рди () рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ @AfterTransaction рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ, рдЬреЛ TestContext рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рднреА рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрд╣ рдПрдиреЛрдЯреЗрд╢рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ @ рдЯреНрд░рд╛рдиреНрд╕рдПрдХреНрдЯреЗрдВрд╢рд┐рдпрд▓ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд▓реЗрдирджреЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛рдмреЗрд╕рдЯреИрд╕реНрдЯрд░ рдФрд░ afterDatasetFileName, рд╕рд╛рде рд╣реА рдорд╛рдирдХ DBUnit рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдм рд╣рдорд╛рд░реА рдкрд░реАрдХреНрд╖рд╛ рдХреИрд╕реА рд╣реЛрдЧреА:

 @ContextConfiguration("classpath:testContext.xml") public class JunitDbunitTest extends AbstractDbunitTransactionalJUnit4SpringContextTests { @Autowired private PersonDao personDao; @Test @Rollback(false) @DbunitDataSets(before = "initialDataset.xml", after = "expectedDataset.xml") @DirtiesContext public void test1() { personDao.save(new Person("")); personDao.save(new Person("")); personDao.save(new Person("")); } } 


рдПрдиреЛрдЯреЗрд╢рди рд░реЛрд▓рдмреИрдХ (рдЧрд▓рдд) рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓реЗрдирджреЗрди рдХреА рдкреБрд╖реНрдЯрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред @DirtiesContext рдПрдиреЛрдЯреЗрд╢рди рд╡рд░реНрдЧ рдореЗрдВ рдЕрдЧрд▓реЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ @DbunitDataSets рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ, рд╣рдордиреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд DBUnor рдбреЗрдЯрд╛рд╕реЗрдЯ рдпреБрдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рд╣реИрдВред

рджрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдХреА рд╕реАрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╕рдВрдд рд╕рдВрджрд░реНрдн рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рди рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрд╢реАрд▓ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ DBUnit рдФрд░ AbstractTransactionalJUnit4SpringContextTests # deleteFromTables рд╡рд┐рдзрд┐) рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреГрдврд╝рддрд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╣рд╛рдпрдХ рдЯреЗрдмрд▓ рдФрд░ рдЕрдиреБрдХреНрд░рдоред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдХреЛ @DirtiesContext рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд╕рдВрджрд░реНрдн рдХреЛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдпреЛрдЬрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдлрд┐рд░ рдЖрдк @DirtiesContext рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдРрд╕рд╛ рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рддрд╛рдХрд┐ рдЗрд╕реЗ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╕реЗ рди рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдФрд░ рдлрд┐рд░, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдЗрддрдиреА рд╕рдЦреНрдд рд╕рдлрд╛рдИ рднреА рдХреИрд╢рд┐рдВрдЧ рдЬреИрд╕реЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рджреЗрдЧреАред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ TestNG рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЕрдореВрд░реНрдд рдкрд░реАрдХреНрд╖рдг рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ JUnit рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ, рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╕рд┐рдмрд▓ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ AbstractTransactorTestNGSpringContextTests рд╣реЛрдЧрд╛ред рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ DbunitTestExecutionListener рд╢реНрд░реЛрддрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд░рдЦрд╛ рдФрд░ рдЗрди рджреЛ рдкрд░реАрдХреНрд╖рдг рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреЛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

рд▓реЗрдЦ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: github.com/forketyfork/spring-dao-test-demo

Source: https://habr.com/ru/post/In140658/


All Articles