如何使用 Spring 安全性对 Spring 4 DAO 方法进行单元测试?
How do I unit test a Spring 4 DAO method with Spring Security?
我对 Spring 4 MVC 应用程序的 DAO 层进行了一些单元测试。然后我向我的控制器中的某些方法以及它们使用的 DAO 添加了 Spring 安全性。
我想出了如何使 @WithMockUser 注释在控制器测试中工作,但我对 DAO 测试感到困惑。我在每次 dao 测试中得到的异常是:
java.lang.IllegalStateException: Failed to load ApplicationContext
....
Caused by: java.lang.IllegalArgumentException: An AuthenticationManager is required
我在 DaoTest 开始时有这些注释:
@TestExecutionListeners({ WithSecurityContextTestExecutionListener.class })
@ContextConfiguration(classes = DaoConfig.class)
其中@ContextConfiguration
与实际代码相同;我建议让它有所不同,但没有具体的建议。我该如何解开这个?我也希望有一种方法可以不使用 org.springframework.web.* 或 org.springframework.test.web.* 类,因为这应该是 'underneath' 整个网络层。
一般来说,一次测试太多东西不是个好主意。通过单元测试,您只想测试一件事和一件事。我的建议是,当您的 DAO 单元测试 运行 时,根本不要 Spring 安全负载。您应该能够使您的 DAO 单元测试 class 扩展某种加载单独的 applicationContext-test.xml 或 Java 配置的 AbstractTest class 不包括 [=16] =] 完全安全。这应该允许您的单元测试不必穿透单元测试真正不应该关心的一些安全层。也就是说,除非您实际上是在尝试集成测试。那将完全是另一种情况....希望这有帮助。
我对 Spring 4 MVC 应用程序的 DAO 层进行了一些单元测试。然后我向我的控制器中的某些方法以及它们使用的 DAO 添加了 Spring 安全性。
我想出了如何使 @WithMockUser 注释在控制器测试中工作,但我对 DAO 测试感到困惑。我在每次 dao 测试中得到的异常是:
java.lang.IllegalStateException: Failed to load ApplicationContext
....
Caused by: java.lang.IllegalArgumentException: An AuthenticationManager is required
我在 DaoTest 开始时有这些注释:
@TestExecutionListeners({ WithSecurityContextTestExecutionListener.class })
@ContextConfiguration(classes = DaoConfig.class)
其中@ContextConfiguration
与实际代码相同;我建议让它有所不同,但没有具体的建议。我该如何解开这个?我也希望有一种方法可以不使用 org.springframework.web.* 或 org.springframework.test.web.* 类,因为这应该是 'underneath' 整个网络层。
一般来说,一次测试太多东西不是个好主意。通过单元测试,您只想测试一件事和一件事。我的建议是,当您的 DAO 单元测试 运行 时,根本不要 Spring 安全负载。您应该能够使您的 DAO 单元测试 class 扩展某种加载单独的 applicationContext-test.xml 或 Java 配置的 AbstractTest class 不包括 [=16] =] 完全安全。这应该允许您的单元测试不必穿透单元测试真正不应该关心的一些安全层。也就是说,除非您实际上是在尝试集成测试。那将完全是另一种情况....希望这有帮助。