【问题标题】:Step by step tutorials for testing spring security [closed]测试弹簧安全性的分步教程[关闭]
【发布时间】:2013-06-30 23:57:37
【问题描述】:

我忍不住问这个问题,因为 SO 不是搜索引擎的替代品,因为我们已经筋疲力尽地搜索正确的内容来开始测试 Spring MVC 应用程序。我们对 Spring 和单元测试非常陌生。请为我们提供有关 Spring REST 服务测试和控制器测试以及 Spring 安全测试的分步教程(如果有)的链接。

请帮忙。

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    控制器。

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

    然后我这样写我的测试:

    @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 安全性,您可能想要模拟 SecurityContextHolder。在这里您可以找到当前用户的详细信息,因此您还可以创建模拟(使用 Mockito 或 EasyMock 等模拟框架)并使其看起来像您以特定用户身份登录。 有关它的更多信息可以在here 找到(还有一些答案向您展示了如何使用特定的模拟框架来做到这一点)。

    和我关于控制器的回答一样,如果你想测试整体情况,你想使用集成测试(例如 Selenium)。


    REST 服务

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

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

    【讨论】:

    • 我不能用 MockMvc 测试 REST 服务
    猜你喜欢
    • 2019-02-03
    • 2017-01-01
    • 1970-01-01
    • 2012-09-25
    • 2017-12-28
    • 1970-01-01
    • 2016-11-25
    • 2012-01-07
    • 2016-06-19
    相关资源
    最近更新 更多