From 057015c14cce4791ff309419de8a8bd6339fd6e7 Mon Sep 17 00:00:00 2001 From: Mic <misvy@vmware.com> Date: Fri, 15 Feb 2013 15:31:04 +0800 Subject: [PATCH] Spring MVC Test Framework and migration to Spring 3.2.1 - migrated to Spring 3.2.1 - added hamcrest to the POM so it can be used with the Spring MVC Test Framework - Started migrating a JUnit test to Spring MVC Test Framework (at this stage, it stills doesn't work. It could be because of a conflict with ContentNegotiatingViewResolver) --- .springBeans | 19 +------ pom.xml | 39 +++++++++++++- .../petclinic/web/VisitsAtomViewTest.java | 52 +++++++++++++++++-- 3 files changed, 87 insertions(+), 23 deletions(-) diff --git a/.springBeans b/.springBeans index 1dea402..91f4b0e 100644 --- a/.springBeans +++ b/.springBeans @@ -7,26 +7,9 @@ </configSuffixes> <enableImports><![CDATA[false]]></enableImports> <configs> - <config>src/main/webapp/WEB-INF/mvc-core-config.xml</config> - <config>src/main/webapp/WEB-INF/mvc-view-config.xml</config> - <config>src/main/resources/spring/dao-config.xml</config> <config>src/main/resources/spring/datasource-config.xml</config> - <config>src/main/resources/spring/tools-config.xml</config> + <config>src/main/webapp/WEB-INF/mvc-view-config.xml</config> </configs> <configSets> - <configSet> - <name><![CDATA[config]]></name> - <allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding> - <incomplete>false</incomplete> - <configs> - <config>src/main/webapp/WEB-INF/mvc-core-config.xml</config> - <config>src/main/webapp/WEB-INF/mvc-view-config.xml</config> - <config>src/main/resources/spring/dao-config.xml</config> - <config>src/main/resources/spring/datasource-config.xml</config> - <config>src/main/resources/spring/tools-config.xml</config> - </configs> - <profiles> - </profiles> - </configSet> </configSets> </beansProjectDescription> diff --git a/pom.xml b/pom.xml index a6d7871..8e0c712 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ <packaging>war</packaging> <version>1.0.0-SNAPSHOT</version> <properties> - <spring.version>3.2.0.RELEASE</spring.version> + <spring.version>3.2.1.RELEASE</spring.version> <slf4j.version>1.7.0</slf4j.version> <log4j.version>1.2.17</log4j.version> <hibernate.version>4.1.4.Final</hibernate.version> @@ -51,6 +51,20 @@ <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> + + <!-- will be a transitive dependency from Spring 3.2.2 --> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-web</artifactId> + <version>${spring.version}</version> + </dependency> + + <!-- added because this dependency is missing in Spring 3.2.1 (can be removed from Spring 3.2.2) --> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-jdbc</artifactId> + <version>${spring.version}</version> + </dependency> <!-- Logging --> <dependency> @@ -234,6 +248,13 @@ <version>1.1</version> </dependency> + <!-- used for Spring MVC Test framework --> + <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-all</artifactId> + <version>1.3</version> + </dependency> + </dependencies> <build> @@ -291,5 +312,21 @@ </executions> </plugin> </plugins> + <testResources> + <testResource> + <directory>src/test/resources</directory> + <filtering>true</filtering> + </testResource> + + <testResource> + <directory>src/main/webapp/WEB-INF</directory> + + <filtering>true</filtering> + + <includes> + <include>**/mvc-*-config.xml</include> + </includes> + </testResource> + </testResources> </build> </project> \ No newline at end of file diff --git a/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java b/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java index 6c79082..7e81a8c 100644 --- a/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java +++ b/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java @@ -27,24 +27,67 @@ import java.util.Map; import org.joda.time.DateTime; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.samples.petclinic.model.Pet; import org.springframework.samples.petclinic.model.PetType; import org.springframework.samples.petclinic.model.Visit; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import org.springframework.web.context.WebApplicationContext; +import static org.hamcrest.Matchers.containsString; import com.sun.syndication.feed.atom.Entry; import com.sun.syndication.feed.atom.Feed; /** - * @author Arjen Poutsma + * @author Arjen Poutsma + * @author Michael Isvy */ +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +// Spring configuration files that are inside WEB-INF folder can be referenced here because they've been +// added to the classpath inside the Maven pom.xml file (inside <build> <testResources> ... </testResources> </build>) +@ContextConfiguration({"classpath*:mvc-*-config.xml", "classpath*:spring/*-config.xml"}) +@ActiveProfiles("jdbc") public class VisitsAtomViewTest { + @Autowired + private WebApplicationContext webApplicationContext; + + private MockMvc mockMvc; + + @Before + public void setup() { + this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build(); + } + private VisitsAtomView visitView; private Map<String, Object> model; private Feed feed; + @Test + public void getVisits() throws Exception { + MediaType mediaType = MediaType.APPLICATION_ATOM_XML; + ResultActions actions = this.mockMvc.perform(get("/owners/7/pets/9/visits.atom").accept(mediaType)); + actions.andExpect(status().isOk()); + actions.andExpect(content().contentType("application/atom+xml")); + //actions.andExpect(content().xml("Pet ClinicService Visits")); + actions.andExpect(xpath("//*").string(containsString("Pet ClinicService Visits"))); + + } + @Before public void setUp() { visitView = new VisitsAtomView(); @@ -55,14 +98,14 @@ public class VisitsAtomViewTest { bello.setType(dog); Visit belloVisit = new Visit(); belloVisit.setPet(bello); - belloVisit.setDate(new DateTime(2009, 1, 1,1,1)); + belloVisit.setDate(new DateTime(2009, 1, 1, 1, 1)); belloVisit.setDescription("Bello visit"); Pet wodan = new Pet(); wodan.setName("Wodan"); wodan.setType(dog); Visit wodanVisit = new Visit(); wodanVisit.setPet(wodan); - wodanVisit.setDate(new DateTime(2009, 1, 2,1,1)); + wodanVisit.setDate(new DateTime(2009, 1, 2, 1, 1)); wodanVisit.setDescription("Wodan visit"); List<Visit> visits = new ArrayList<Visit>(); visits.add(belloVisit); @@ -74,13 +117,14 @@ public class VisitsAtomViewTest { } + @Test public void buildFeedMetadata() { visitView.buildFeedMetadata(model, feed, null); assertNotNull("No id set", feed.getId()); assertNotNull("No title set", feed.getTitle()); - assertEquals("Invalid update set", new DateTime(2009, 1, 2,1,1).toDate(), feed.getUpdated()); + assertEquals("Invalid update set", new DateTime(2009, 1, 2, 1, 1).toDate(), feed.getUpdated()); } @Test -- GitLab