Преглед изворни кода

Test for CargoTrackingController.

Set command class in controller constructor, since it's tightly coupled to code, not configurable.

Use assertEquals in repository test, making it pass.

Added spring-test jar to pom.

No logfile appender in test-logging.
peter_backlund пре 19 година
родитељ
комит
ea736af6e8

+ 6
- 0
dddsample/pom.xml Прегледај датотеку

@@ -99,6 +99,12 @@
99 99
       <version>2.5</version>
100 100
     </dependency>
101 101
     <dependency>
102
+      <groupId>org.springframework</groupId>
103
+      <artifactId>spring-test</artifactId>
104
+      <version>2.5</version>
105
+      <scope>test</scope>
106
+    </dependency>
107
+    <dependency>
102 108
       <groupId>org.hibernate</groupId>
103 109
       <artifactId>hibernate</artifactId>
104 110
       <version>3.2.5.ga</version>

+ 4
- 0
dddsample/src/main/java/se/citerus/dddsample/web/CargoTrackingController.java Прегледај датотеку

@@ -20,6 +20,10 @@ public class CargoTrackingController extends SimpleFormController {
20 20
    */
21 21
   private CargoService cargoService;
22 22
 
23
+  public CargoTrackingController() {
24
+    setCommandClass(TrackCommand.class);
25
+  }
26
+
23 27
   @Override
24 28
   public ModelAndView onSubmit(final Object command) throws ServletException {
25 29
     final Map<String, Object> model = new HashMap<String, Object>();

+ 5
- 6
dddsample/src/main/webapp/WEB-INF/dispatch-servlet.xml Прегледај датотеку

@@ -1,21 +1,20 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2 2
 <beans xmlns="http://www.springframework.org/schema/beans"
3
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
3
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
5 5
 
6 6
   <bean name="/start.html" class="se.citerus.dddsample.web.CargoTrackingController">
7 7
     <property name="sessionForm" value="true"/>
8 8
     <property name="commandName" value="trackCommand"/>
9
-    <property name="commandClass" value="se.citerus.dddsample.web.TrackCommand"/>
10 9
     <property name="formView" value="start"/>
11 10
     <property name="successView" value="cargo"/>
12 11
     <property name="cargoService" ref="cargoService"/>
13 12
   </bean>
14 13
 
15 14
   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
16
-    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
17
-    <property name="prefix" value="/WEB-INF/jsp/"></property>
18
-    <property name="suffix" value=".jsp"></property>
15
+    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
16
+    <property name="prefix" value="/WEB-INF/jsp/"/>
17
+    <property name="suffix" value=".jsp"/>
19 18
   </bean>
20 19
 
21 20
 </beans>

+ 1
- 1
dddsample/src/test/java/se/citerus/dddsample/domain/CargoRepositoryTest.java Прегледај датотеку

@@ -19,7 +19,7 @@ public class CargoRepositoryTest extends AbstractTransactionalDataSourceSpringCo
19 19
     final TrackingId trackingId = new TrackingId("XYZ");
20 20
     Cargo cargo = cargoRepository.find(trackingId);
21 21
 
22
-    assertSame(trackingId, cargo.trackingId());
22
+    assertEquals(trackingId, cargo.trackingId());
23 23
   }
24 24
 
25 25
 }

+ 64
- 0
dddsample/src/test/java/se/citerus/dddsample/web/CargoTrackingControllerTest.java Прегледај датотеку

@@ -0,0 +1,64 @@
1
+package se.citerus.dddsample.web;
2
+
3
+import junit.framework.TestCase;
4
+import org.springframework.mock.web.MockHttpServletRequest;
5
+import org.springframework.mock.web.MockHttpServletResponse;
6
+import org.springframework.mock.web.MockHttpSession;
7
+import org.springframework.mock.web.MockServletContext;
8
+import org.springframework.web.servlet.ModelAndView;
9
+import se.citerus.dddsample.domain.Cargo;
10
+import se.citerus.dddsample.domain.Location;
11
+import se.citerus.dddsample.domain.TrackingId;
12
+import se.citerus.dddsample.service.CargoService;
13
+
14
+public class CargoTrackingControllerTest extends TestCase {
15
+
16
+  CargoTrackingController controller;
17
+  MockHttpServletRequest request;
18
+  MockHttpServletResponse response;
19
+  MockHttpSession session;
20
+  MockServletContext servletContext;
21
+
22
+  protected void setUp() throws Exception {
23
+    servletContext = new MockServletContext("test");
24
+    request = new MockHttpServletRequest(servletContext);
25
+    response = new MockHttpServletResponse();
26
+    session = new MockHttpSession(servletContext);
27
+    request.setSession(session);
28
+    controller = new CargoTrackingController();
29
+    controller.setFormView("test-form");
30
+    controller.setSuccessView("test-success");
31
+    controller.setCommandName("test-command-name");
32
+    controller.setCargoService(new CargoService() {
33
+      public Cargo find(String trackingId) {
34
+        Cargo cargo = new Cargo(
35
+          new TrackingId(trackingId),
36
+          new Location("AAA"),
37
+          new Location("BBB"));
38
+        return cargo;
39
+      }
40
+    });
41
+  }
42
+
43
+  public void testHandleGet() throws Exception {
44
+    request.setMethod("GET");
45
+
46
+    ModelAndView mav = controller.handleRequest(request, response);
47
+
48
+    assertEquals("test-form", mav.getViewName());
49
+    assertEquals(2, mav.getModel().size());
50
+    assertTrue(mav.getModel().get("test-command-name") instanceof TrackCommand);
51
+  }
52
+
53
+  public void testHandlePost() throws Exception {
54
+    request.setMethod("POST");
55
+
56
+    ModelAndView mav = controller.handleRequest(request, response);
57
+
58
+    assertEquals("test-success", mav.getViewName());
59
+    assertEquals(1, mav.getModel().size());
60
+    Location location = (Location) mav.getModel().get("location");
61
+    assertEquals("AAA", location.unlocode());
62
+  }
63
+
64
+}

+ 1
- 1
dddsample/src/test/resources/log4j.properties Прегледај датотеку

@@ -1,6 +1,6 @@
1 1
 # For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
2 2
 # For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
3
-log4j.rootLogger=INFO, stdout, logfile
3
+log4j.rootLogger=INFO, stdout
4 4
 
5 5
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
6 6
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout