我有春季网络应用程序与球衣休息服务。但是,通过弹簧安全保护休息,并且从单元测试代码很难执行登录过程。我想在禁用整个弹簧安全性的情况下测试休息服务。它甚至可能吗?
答案 0 :(得分: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
方法中)。
答案 1 :(得分:0)
将它作为一个pojo进行测试。传递任何东西,返回任何内容,根本不加载应用程序上下文 - 这将是一个集成测试。
在没有加载框架的情况下轻松测试功能的能力是spring的主要优势之一。
答案 2 :(得分:0)
你没有说什么是“难”,所以我假设你的REST服务中有一些东西,即你要测试的java方法,这需要验证结果。 Spring具有用于模拟身份验证结果的实用程序。例如,您可以使用@Before
设置方法执行以下操作:
Object principal = null; // fix this
Object credentials = null; // fix this
Authentication auth = new org.springframework.security.authentication.TestingAuthenticationToken(principal, credentials);
SecurityContextHolder.getContext().setAuthentication(auth);
但是,你还没有说出你实际想要解决的问题......