我有一堆集成测试。我想要一个具有测试使用的实用方法的类。我开始将实用程序方法全部静态化,并且很容易从测试中获得它们的句柄。
但是,我需要实用程序类才能获得grailsApplication.confg的句柄,所以我可以引入一些配置。为此,由于实用程序类不是服务,因此我创建了类实现ApplicationContextAware
。这意味着我必须基于静态方法实例。很公平。
为了使它成为ApplicationContextAware,我实现了接口,我做了:
class TestUtils {
def grailsApplication
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
// TODO Auto-generated method stub
this.grailsApplication = grailsApplication
}
...
但这永远不会被调用,这意味着我的本地grailApplication ref永远不会被设置。
如果我将此TestUtility字段设为服务或我做错了什么,会更好吗?
答案 0 :(得分:5)
您可以使用静态方法保留实用程序类,并通过Holders类访问grailsApplication
:
def grailsApplication = Holders.grailsApplication