0

我有带有球衣休息服务的 Spring Web 应用程序。然而,休息是通过弹簧安全保护的,登录过程很难从单元测试代码中执行。我想在禁用整个春季安全性的情况下测试休息服务。甚至可能吗?

4

3 回答 3

0

基于注释的 Web 服务的优点之一是您可以轻松地对它们进行单元测试。

class WebServiceEndpoint {

    @Path("/foo/{fooId}")
    @POST
    @Produces({ MediaType.APPLICATION_XML })
    public Response doFoo(@PathParam("fooId") Integer fooId) { 
        /// ... web service endpoint implementation
    }

}

如果你使用 Spring 的 servlet 过滤器来保证安全,那么方法中不应该有任何与安全相关的代码doFoo,所以你可以创建一个新WebServiceEndpoint类并调用该方法。所以这是“禁用”安全性的一种方式。

当您说登录过程“困难”时,您是什么意思?如果您已成功登录一次,那么您可以在其他单元测试中(例如在@Before方法中)重用相同的代码。

于 2012-05-01T09:50:18.943 回答
0

你没有说什么是“难的”,所以我假设你在你的 REST 服务中有一些东西,即在你想要测试的 java 方法中,这需要身份验证结果。Spring 具有用于模拟身份验证结果的实用程序。例如,您可以在@Beforesetup 方法中执行以下操作:

Object principal = null; // fix this
Object credentials = null; // fix this
Authentication auth = new org.springframework.security.authentication.TestingAuthenticationToken(principal, credentials);
SecurityContextHolder.getContext().setAuthentication(auth);

但是同样,您还没有说出您实际上要解决的问题...

于 2012-05-01T21:19:18.847 回答
0

只需将其作为 pojo 进行测试。传入任何内容,返回任何内容,根本不加载应用程序上下文 - 这将是一个集成测试。

无需加载框架即可轻松测试功能的能力是 Spring 的主要优势之一。

于 2012-05-01T10:29:42.643 回答