2012-07-06 87 views
3

在Grails 2.0.4中,我试图编写一个调用静态SpringSecurityUtils.reauthenticate的控制器单元测试。测试在该调用中返回一个NullPointerException。在调试器中,我可以看到没有填充SpringSecurityUtils的Groovy动态属性(声明的方法等)。为什么SpringSecurityUtils在这个Grails单元测试中为null?

我注意到在运行测试时,单元测试失败后发出“配置Spring Security Core”日志消息。下面是一个简单的测试:

class ReproTest { 
    void testSpringSecurityUtils() { 
     String.valueOf(true) // OK: a public final class from the JDK 
     URLUtils.isRelativeURL("foo") // OK: a class from another plugin 
     SpringSecurityUtils.reauthenticate "user", "pw" // fails, NPE 
    } 
} 

我最初的反应是,也许插件在单元测试是无法访问的,但如果是这样,为什么是URLUtils呼叫工作?为什么测试“足够”初始化插件,但在测试完成后?

+0

也许http://nerderg.com/Grails帮助您用SpringSecurity进行测试 – 2012-07-06 13:11:51

回答

3

对于单元测试,容器未启动。没有春季注射或“grails善良”正在发生。您会在日志中看到插件在单元测试运行后正在初始化,因为它[集装箱]确实开始进行集成测试。如果你想测试SpringSecurityUtils,虽然猜测它已经在插件中正确测试过了,但你会想写一个集成测试。

+0

谢谢!我的测试目标是测试一个控制器,SpringSecurityUtils是达到目的的一种手段,但我会将其移至集成测试。 (尽管我在单元测试期间为什么资源插件中的类可用,但我仍然感到困惑。) – withoutairs 2012-07-07 19:21:53

+0

代码和依赖项仍然存在。只是没有一个容器/弹簧依赖管理。您对URLUtils的调用是静态调用,可能没有其他容器管理的依赖关系,因此它可以工作。 SpringSecurityUtils调用可能注入了依赖项。 (必须查看代码才能确定,但​​是由于类似NPE的原因,猜测你的测试失败了?) – 2012-07-09 13:44:37

+0

正确,NPE - 上面的代码示例演示了它。 SpringSecurityUtils.reauthenticate的确注入了一个依赖项(因此无论如何它都是一个失败的原因),但真正令我困惑的是为什么SpringSecurityUtils没有获得groovified。哦,我很高兴有时会感到困惑。 – withoutairs 2012-07-10 19:17:15

相关问题