AbstractJpaClinicTests.java
上传用户:dezhong
上传日期:2022-08-10
资源大小:167k
文件大小:7k
源码类别:

Java编程

开发平台:

Java

  1. package org.springframework.samples.petclinic.jpa;
  2. import java.util.Collection;
  3. import java.util.Date;
  4. import javax.persistence.EntityManager;
  5. import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
  6. import org.springframework.samples.petclinic.Clinic;
  7. import org.springframework.samples.petclinic.Owner;
  8. import org.springframework.samples.petclinic.Pet;
  9. import org.springframework.samples.petclinic.PetType;
  10. import org.springframework.samples.petclinic.Vet;
  11. import org.springframework.samples.petclinic.Visit;
  12. import org.springframework.samples.petclinic.util.EntityUtils;
  13. import org.springframework.test.annotation.ExpectedException;
  14. import org.springframework.test.jpa.AbstractJpaTests;
  15. /**
  16.  * <p>
  17.  * This class extends {@link AbstractJpaTests}, one of the valuable test
  18.  * superclasses provided in the <code>org.springframework.test</code> package.
  19.  * This represents best practice for integration tests with Spring for JPA based
  20.  * tests which require <em>shadow class loading</em>. For all other types of
  21.  * integration testing, the <em>Spring TestContext Framework</em> is
  22.  * preferred.
  23.  * </p>
  24.  * <p>
  25.  * AbstractJpaTests and its superclasses provide the following services:
  26.  * <ul>
  27.  * <li>Injects test dependencies, meaning that we don't need to perform
  28.  * application context lookups. See the setClinic() method. Injection uses
  29.  * autowiring by type.</li>
  30.  * <li>Executes each test method in its own transaction, which is automatically
  31.  * rolled back by default. This means that even if tests insert or otherwise
  32.  * change database state, there is no need for a teardown or cleanup script.</li>
  33.  * <li>Provides useful inherited protected fields, such as a
  34.  * {@link SimpleJdbcTemplate} that can be used to verify database state after
  35.  * test operations, or verify the results of queries performed by application
  36.  * code. Alternatively, you can use protected convenience methods such as
  37.  * {@link #countRowsInTable(String)}, {@link #deleteFromTables(String[])},
  38.  * etc. An ApplicationContext is also inherited, and can be used for explicit
  39.  * lookup if necessary.</li>
  40.  * </ul>
  41.  * <p>
  42.  * {@link AbstractJpaTests} and related classes are shipped in
  43.  * <code>spring-test.jar</code>.
  44.  * </p>
  45.  *
  46.  * @author Rod Johnson
  47.  * @author Sam Brannen
  48.  * @see AbstractJpaTests
  49.  */
  50. public abstract class AbstractJpaClinicTests extends AbstractJpaTests {
  51. protected Clinic clinic;
  52. /**
  53.  * This method is provided to set the Clinic instance being tested by the
  54.  * Dependency Injection injection behaviour of the superclass from the
  55.  * <code>org.springframework.test</code> package.
  56.  *
  57.  * @param clinic clinic to test
  58.  */
  59. public void setClinic(Clinic clinic) {
  60. this.clinic = clinic;
  61. }
  62. @ExpectedException(IllegalArgumentException.class)
  63. public void testBogusJpql() {
  64. this.sharedEntityManager.createQuery("SELECT RUBBISH FROM RUBBISH HEAP").executeUpdate();
  65. }
  66. public void testApplicationManaged() {
  67. EntityManager appManaged = this.entityManagerFactory.createEntityManager();
  68. appManaged.joinTransaction();
  69. }
  70. public void testGetVets() {
  71. Collection<Vet> vets = this.clinic.getVets();
  72. // Use the inherited countRowsInTable() convenience method (from
  73. // AbstractTransactionalDataSourceSpringContextTests) to verify the
  74. // results.
  75. assertEquals("JDBC query must show the same number of vets", super.countRowsInTable("VETS"), vets.size());
  76. Vet v1 = EntityUtils.getById(vets, Vet.class, 2);
  77. assertEquals("Leary", v1.getLastName());
  78. assertEquals(1, v1.getNrOfSpecialties());
  79. assertEquals("radiology", (v1.getSpecialties().get(0)).getName());
  80. Vet v2 = EntityUtils.getById(vets, Vet.class, 3);
  81. assertEquals("Douglas", v2.getLastName());
  82. assertEquals(2, v2.getNrOfSpecialties());
  83. assertEquals("dentistry", (v2.getSpecialties().get(0)).getName());
  84. assertEquals("surgery", (v2.getSpecialties().get(1)).getName());
  85. }
  86. public void testGetPetTypes() {
  87. Collection<PetType> petTypes = this.clinic.getPetTypes();
  88. assertEquals("JDBC query must show the same number of pet types", super.countRowsInTable("TYPES"),
  89. petTypes.size());
  90. PetType t1 = EntityUtils.getById(petTypes, PetType.class, 1);
  91. assertEquals("cat", t1.getName());
  92. PetType t4 = EntityUtils.getById(petTypes, PetType.class, 4);
  93. assertEquals("snake", t4.getName());
  94. }
  95. public void testFindOwners() {
  96. Collection<Owner> owners = this.clinic.findOwners("Davis");
  97. assertEquals(2, owners.size());
  98. owners = this.clinic.findOwners("Daviss");
  99. assertEquals(0, owners.size());
  100. }
  101. public void testLoadOwner() {
  102. Owner o1 = this.clinic.loadOwner(1);
  103. assertTrue(o1.getLastName().startsWith("Franklin"));
  104. Owner o10 = this.clinic.loadOwner(10);
  105. assertEquals("Carlos", o10.getFirstName());
  106. // Check lazy loading, by ending the transaction
  107. endTransaction();
  108. // Now Owners are "disconnected" from the data store.
  109. // We might need to touch this collection if we switched to lazy loading
  110. // in mapping files, but this test would pick this up.
  111. o1.getPets();
  112. }
  113. public void testInsertOwner() {
  114. Collection<Owner> owners = this.clinic.findOwners("Schultz");
  115. int found = owners.size();
  116. Owner owner = new Owner();
  117. owner.setLastName("Schultz");
  118. this.clinic.storeOwner(owner);
  119. // assertTrue(!owner.isNew()); -- NOT TRUE FOR TOPLINK (before commit)
  120. owners = this.clinic.findOwners("Schultz");
  121. assertEquals(found + 1, owners.size());
  122. }
  123. public void testUpdateOwner() throws Exception {
  124. Owner o1 = this.clinic.loadOwner(1);
  125. String old = o1.getLastName();
  126. o1.setLastName(old + "X");
  127. this.clinic.storeOwner(o1);
  128. o1 = this.clinic.loadOwner(1);
  129. assertEquals(old + "X", o1.getLastName());
  130. }
  131. public void testLoadPet() {
  132. Collection<PetType> types = this.clinic.getPetTypes();
  133. Pet p7 = this.clinic.loadPet(7);
  134. assertTrue(p7.getName().startsWith("Samantha"));
  135. assertEquals(EntityUtils.getById(types, PetType.class, 1).getId(), p7.getType().getId());
  136. assertEquals("Jean", p7.getOwner().getFirstName());
  137. Pet p6 = this.clinic.loadPet(6);
  138. assertEquals("George", p6.getName());
  139. assertEquals(EntityUtils.getById(types, PetType.class, 4).getId(), p6.getType().getId());
  140. assertEquals("Peter", p6.getOwner().getFirstName());
  141. }
  142. public void testInsertPet() {
  143. Owner o6 = this.clinic.loadOwner(6);
  144. int found = o6.getPets().size();
  145. Pet pet = new Pet();
  146. pet.setName("bowser");
  147. Collection<PetType> types = this.clinic.getPetTypes();
  148. pet.setType(EntityUtils.getById(types, PetType.class, 2));
  149. pet.setBirthDate(new Date());
  150. o6.addPet(pet);
  151. assertEquals(found + 1, o6.getPets().size());
  152. this.clinic.storeOwner(o6);
  153. // assertTrue(!pet.isNew()); -- NOT TRUE FOR TOPLINK (before commit)
  154. o6 = this.clinic.loadOwner(6);
  155. assertEquals(found + 1, o6.getPets().size());
  156. }
  157. public void testUpdatePet() throws Exception {
  158. Pet p7 = this.clinic.loadPet(7);
  159. String old = p7.getName();
  160. p7.setName(old + "X");
  161. this.clinic.storePet(p7);
  162. p7 = this.clinic.loadPet(7);
  163. assertEquals(old + "X", p7.getName());
  164. }
  165. public void testInsertVisit() {
  166. Pet p7 = this.clinic.loadPet(7);
  167. int found = p7.getVisits().size();
  168. Visit visit = new Visit();
  169. p7.addVisit(visit);
  170. visit.setDescription("test");
  171. this.clinic.storePet(p7);
  172. // assertTrue(!visit.isNew()); -- NOT TRUE FOR TOPLINK (before commit)
  173. p7 = this.clinic.loadPet(7);
  174. assertEquals(found + 1, p7.getVisits().size());
  175. }
  176. }