JUnit测试Spring MVC控制器并非易事 。
但是最近,一个新项目 (即将在Spring推出)提供了新工具来简化此工作。
这篇文章说明了如何通过JUnit测试来测试一个简单的控制器。
该代码是JUnit Testing Spring Service和DAO(带有内存数据库)中使用的代码的变体。 可从Spring-MVC-JUnit-Testing目录中的Gihut获得。
测试配置类
这些与Service和DAO测试所需的相同。
控制者
我们的控制器:
@Controller
public class MyController {
@Autowired
private MyService myService;
@RequestMapping(value = '/')
public String home(Model model) {
return 'index';
}
@RequestMapping(value = '/roundtrip')
public String persistenceStatus(Model model) {
MilliTimeItem retr = myService.createAndRetrieve();
model.addAttribute('RoundTrip', retr);
return 'roundtrip';
}
}
控制器测试
下面创建一个MockMvc实例来测试模拟的用户请求:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={ JpaTestConfig.class, TestConfig.class })
public class MyControllerTest {
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders
.annotationConfigSetup(JpaTestConfig.class, TestConfig.class)
.build();
}
@Test
public void testHome() throws Exception {
mockMvc.perform(get('/'))
.andExpect(status().isOk())
.andExpect(forwardedUrl('WEB-INF/pages/index.jsp'));
}
@Test
public void testPersistenceStatus() throws Exception {
mockMvc.perform(get('/roundtrip'))
.andExpect(status().isOk())
.andExpect(forwardedUrl('WEB-INF/pages/roundtrip.jsp'))
.andExpect(model().attributeExists('RoundTrip'));
}
}
/请求测试返回的状态以及到JSP页面的URL映射。 / roundtrip请求确保返回的模型确实包含Roundtrip属性。
依存关系
Spring MVC测试工件尚无法从maven的中央存储库中获得。 它应该从另一个存储库获得:
<repositories>
<repository>
<id>spring.test-mvc</id>
<url>http://repo.springsource.org/libs-milestone</url>
</repository>
</repositories>
所需的依赖项是:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test-mvc</artifactId>
<version>1.0.0.M1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
更多春天相关的帖子在这里 。
参考: 技术说明博客上的JCG合作伙伴 Jerome Versrynge提供的Spring MVC Controller JUnit Testing 。
翻译自: https://www.javacodegeeks.com/2012/10/spring-mvc-controller-junit-testing.html