如何使用Spring Security对Spring 4 DAO方法进行单元测试?

时间:2016-02-23 21:20:35

标签: java spring unit-testing dao

我对Spring 4 MVC应用程序的DAO层进行了一些单元测试。然后我将Spring Security添加到我的控制器中的某些方法,以及他们使用的DAO。

我想出了如何在控制器测试中使@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。*类的情况下完成它,因为它应该在'之下。整个网络层。

1 个答案:

答案 0 :(得分:0)

一般来说,一次测试太多东西不是一个好主意。通过单元测试,您只想测试一件事和一件事。我的建议是在你的DAO单元测试运行时根本没有Spring Security加载。您应该能够使DAO单元测试类扩展某种AbstractTest类,该类加载单独的applicationContext-test.xml或完全不包含Spring Security的Java Config。这应该允许你的单元测试不必刺穿一些安全层单元测试真的不应该关心。除非,实际上你正在尝试进行集成测试。这完全是另一种情况......希望这会有所帮助。