测试弹簧安全性的分步教程

时间:2013-07-03 10:25:40

标签: unit-testing spring-mvc spring-security testng

我无法阻止自己提出这个问题,因为搜索引擎不是替代品,因为我们已经用尽了正确的内容来开始测试Spring MVC应用程序。我们对弹簧和单元测试都很陌生。请提供有关Spring REST服务测试和Controller测试以及Spring安全测试的分步教程(如果有)的链接。

请帮助。

提前致谢。

1 个答案:

答案 0 :(得分:3)

控制器。

如果要测试控制器本身的代码(返回正确的ModelAndView或ModelMap),您可以轻松编写一些单元测试。 我通常会使用 spring-test junit

然后我写这样的测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-test-beans.xml")
public class FormControllerTest {

        @Autowired
        private MyController controller;

        @Test
        public void testFirstAction() {
                ModelMap model = new ModelMap();
                assertEquals("result", controller.firstAction("data", model));
                assertEquals("test", model.get("data"));
        }
}

所以这样我测试视图/模型是否正确。如果您想查看网页本身是否正确并使用了正确的操作,您可能需要查看Selenium集成测试(如果它是网页,而不是REST服务)。


Spring security

要测试Spring安全性,您可能想要模拟SecurityContextHolder。在这里,您可以找到当前用户的详细信息,因此您还可以创建模拟(使用像Mockito或EasyMock这样的模拟框架)并使其看起来像您以特定用户身份登录。 可以找到关于它的更多信息here(也有一些答案显示了如何使用特定的模拟框架来实现它。)

与我对控制器的回答相同,如果你想测试总图,你想使用集成测试(例如Selenium)。


REST服务

REST服务本身(不是控制器)并不难测试,因为它更像是集成测试而不是单元测试。 我认为测试这个的最好方法是创建一个REST客户端(可以使用RESTEasy或Apache CXF等JAX-RS框架完成)并测试REST客户端获得的结果。

当您使用JAX-RS(而不是Spring MVC)定义REST服务时,这通常更容易实现,但这并非不可能。如果您不想创建接口和额外的域类,那么您也可以使用Apache HttpClient。我还找到了一个如何使用它的例子here