无法从集成测试中获取grailsApplication参考

时间:2011-03-28 16:53:13

标签: grails

我正在使用Grails 1.2.1并尝试为我的一个服务类编写集成测试。我想测试的服务方法是......

class UtilityService {

boolean transactional = false

def grailsApplication

def isAuthorizedHost(String hostIpAddr) {
    // Simple validation
    if (hostIpAddr == null || hostIpAddr.length() == 0)
        return false;
    //
    def allowedDomains = grailsApplication.config.proxy.allowedDomains
...

但在编写集成测试时,我无法获得对grailsApplication对象的非null引用...

class UtilityServiceTests extends GrailsUnitTestCase {

def grailsApplication


void testIsAuthorizedHost() {
    def utilityService = new UtilityService()
    utilityService.grailsApplication = grailsApplication
    def ret = utilityService.isAuthorizedHost("127.0.0.1")
    assertTrue( ret )
}

这是错误。我如何获得参考? - 戴夫

无法在null对象上获取属性'config'

java.lang.NullPointerException:无法在null对象上获取属性“config” 在com.nna.tool.proxy.Utility.UtilityService.isAuthorizedHost(UtilityService.groovy:26) at com.nna.tool.proxy.Utility.UtilityService $ isAuthorizedHost.call(Unknown Source) 在com.nna.tool.proxy.Utility.UtilityServiceTests.testIsAuthorizedHost(UtilityServiceTests.groovy:20)

4 个答案:

答案 0 :(得分:2)

请在此处查看答案。它也可能适用于您的情况。您可以将该代码放在tests setup()方法中......

Grails Functional Testing - grailsApplication.config is null within controllers and services

答案 1 :(得分:1)

我认为grailsApplication属性仅在控制器和视图中可用,用于服务

请尝试ApplicationHolder.application.config.proxy.allowedDomains

答案 2 :(得分:1)

您需要运行集成测试,因为grails测试不是jUnit。

答案 3 :(得分:1)

Constructing grailsApp使用DefaultGrailsApplication即可。

import org.codehaus.groovy.grails.commons.DefaultGrailsApplication

class UtilityServiceTests extends GrailsUnitTestCase {
    def grailsApplication = new DefaultGrailsApplication()

    void testIsAuthorizedHost() {
        def utilityService = new UtilityService()
        utilityService.grailsApplication = grailsApplication
        def ret = utilityService.isAuthorizedHost("127.0.0.1")
        assertTrue( ret )
     }
}

参考

grails-core / grails-core / src / main / groovy / org / codehaus / groovy / grails / commons / DefaultGrailsApplication.java

相关问题