diff --git a/spring-mvc-velocity/pom.xml b/spring-mvc-velocity/pom.xml
index c655745b05..597e638cf7 100644
--- a/spring-mvc-velocity/pom.xml
+++ b/spring-mvc-velocity/pom.xml
@@ -95,6 +95,12 @@
${powermock.version}
test
+
+ org.springframework
+ spring-test
+ ${org.springframework.version}
+ test
+
diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java
index 78a6e06e7a..fe88705b90 100644
--- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java
+++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java
@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import java.util.List;
@Controller
+@RequestMapping("/")
public class MainController {
private final TutorialsService tutService;
diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/domain/Tutorial.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/domain/Tutorial.java
index bc0118790a..47265aa98c 100644
--- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/domain/Tutorial.java
+++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/domain/Tutorial.java
@@ -13,4 +13,22 @@ public class Tutorial {
this.description = description;
this.author = author;
}
+
+ public Integer getTutId() {
+ return tutId;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+
}
diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java
new file mode 100644
index 0000000000..42d6149151
--- /dev/null
+++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java
@@ -0,0 +1,10 @@
+package com.baeldung.mvc.velocity.service;
+
+import java.util.List;
+
+import com.baeldung.mvc.velocity.domain.Tutorial;
+
+public interface ITutorialsService {
+
+ public List listTutorials();
+}
diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java
index 4b6c5de427..f67cc0824f 100644
--- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java
+++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java
@@ -7,7 +7,7 @@ import java.util.Arrays;
import java.util.List;
@Service
-public class TutorialsService {
+public class TutorialsService implements ITutorialsService {
public List listTutorials() {
return Arrays.asList(
diff --git a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java
new file mode 100644
index 0000000000..d7f8411325
--- /dev/null
+++ b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java
@@ -0,0 +1,81 @@
+package com.baeldung.mvc.velocity.test;
+
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasProperty;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.is;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
+
+import java.util.Arrays;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.springframework.beans.factory.annotation.Autowired;
+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.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+
+import com.baeldung.mvc.velocity.domain.Tutorial;
+import com.baeldung.mvc.velocity.service.ITutorialsService;
+import com.baeldung.mvc.velocity.service.TutorialsService;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {"classpath:mvc-servlet.xml"})
+@WebAppConfiguration
+public class DataContentControllerTest {
+
+
+ private MockMvc mockMvc;
+
+ @Autowired
+ private ITutorialsService tutServiceMock;
+
+ @Autowired
+ private WebApplicationContext webApplicationContext;
+
+ @Before
+ public void setUp() {
+ tutServiceMock = Mockito.mock(TutorialsService.class);
+ Mockito.reset(tutServiceMock);
+
+ mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
+ }
+
+ @Test
+ public void testModel() throws Exception{
+
+
+ Mockito.when(tutServiceMock.listTutorials()).thenReturn(Arrays.asList(
+ new Tutorial(1, "Guava", "Introduction to Guava", "GuavaAuthor"),
+ new Tutorial(2, "Android", "Introduction to Android", "AndroidAuthor")
+ ));
+
+ mockMvc.perform(get("/"))
+ .andExpect(status().isOk())
+ .andExpect(view().name("index"))
+ .andExpect(model().attribute("tutorials", hasSize(2)))
+ .andExpect(model().attribute("tutorials", hasItem(
+ allOf(
+ hasProperty("tutId", is(1)),
+ hasProperty("author", is("GuavaAuthor")),
+ hasProperty("title", is("Guava"))
+ )
+ )))
+ .andExpect(model().attribute("tutorials", hasItem(
+ allOf(
+ hasProperty("tutId", is(2)),
+ hasProperty("author", is("AndroidAuthor")),
+ hasProperty("title", is("Android"))
+ )
+ )));
+ }
+}
diff --git a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/NavigationControllerTest.java b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/NavigationControllerTest.java
index 332c4d4c33..77cd2feadd 100644
--- a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/NavigationControllerTest.java
+++ b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/NavigationControllerTest.java
@@ -1,32 +1,41 @@
package com.baeldung.mvc.velocity.test;
-import com.baeldung.mvc.velocity.controller.MainController;
-import com.baeldung.mvc.velocity.domain.Tutorial;
-import com.baeldung.mvc.velocity.service.TutorialsService;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.springframework.ui.ExtendedModelMap;
-import org.springframework.ui.Model;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
import java.util.Arrays;
import java.util.List;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.ui.ExtendedModelMap;
+import org.springframework.ui.Model;
+
+import com.baeldung.mvc.velocity.controller.MainController;
+import com.baeldung.mvc.velocity.domain.Tutorial;
+import com.baeldung.mvc.velocity.service.TutorialsService;
-@RunWith(MockitoJUnitRunner.class)
+@RunWith(SpringJUnit4ClassRunner.class)
+@WebAppConfiguration
+@ContextConfiguration(locations = {"classpath:mvc-servlet.xml"})
public class NavigationControllerTest {
- private final MainController mainController = new MainController(Mockito.mock(TutorialsService.class));
+ private MainController mainController = new MainController(Mockito.mock(TutorialsService.class));
private final Model model = new ExtendedModelMap();
+
@Test
- public final void shouldGoToTutorialListView() {
+ public void shouldGoToTutorialListView() {
Mockito.when(mainController.getTutService().listTutorials())
.thenReturn(createTutorialList());
@@ -36,7 +45,24 @@ public class NavigationControllerTest {
assertEquals("index", view);
assertNotNull(tutorialListAttribute);
}
+
+ @Test
+ public void testContent() throws Exception{
+ List tutorials = Arrays.asList(
+ new Tutorial(1, "Guava", "Introduction to Guava", "GuavaAuthor"),
+ new Tutorial(2, "Android", "Introduction to Android", "AndroidAuthor")
+ );
+ Mockito.when(mainController.getTutService().listTutorials()).thenReturn(tutorials);
+
+ String view = mainController.listTutorialsPage(model);
+
+ verify(mainController.getTutService(), times(1)).listTutorials();
+ verifyNoMoreInteractions(mainController.getTutService());
+
+ assertEquals("index", view);
+ assertEquals(tutorials, model.asMap().get("tutorials"));
+ }
private static List createTutorialList() {
return Arrays.asList(new Tutorial(1, "TestAuthor", "Test Title", "Test Description"));
diff --git a/spring-mvc-velocity/src/test/resources/mvc-servlet.xml b/spring-mvc-velocity/src/test/resources/mvc-servlet.xml
new file mode 100644
index 0000000000..8b4fd570fe
--- /dev/null
+++ b/spring-mvc-velocity/src/test/resources/mvc-servlet.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file