MissingPropertyException при выполнении модульных тестов для класса обслуживания Grails - PullRequest
0 голосов
/ 21 октября 2010

Я пишу кейсы для моего класса обслуживания. Ниже мой код в контроллере:

TuneController

def list = {

}

def listData= {

    playerId="6600AE"
    def tuneInstanceList = new ArrayList<Tune>()


    tuneInstanceList = tuneService.calculateId(String playerId)


    def editResult = [total: tuneInstanceList.size(), items: tuneInstanceList]


    render editResult as JSON;
}

Ниже мой код в TuneService: ниже метод вызывается из действия listData. ListData упоминается в моем js файле test.js

List<Tune> calculateId(String playerId) {             

   try{
   //read the sql file 
        String playerSql = grailsApplication.mainContext.getResource('classpath:' +         Constants.PLAYER_FILE).inputStream.text 

    def sql = new groovy.sql.Sql(dataSource)                 

    def params = [playerId:playerId] 
    def tuneInstanceList = new ArrayList<Tune>() 

    def results = sql.rows(playerSql, params) 

    tuneInstanceList = results.each { 
        def tune = new Tune() 
        tune.setPlayerId  it.player_id   
        tuneInstanceList.add tune
    }
    return tuneInstanceList

}catch (Exception ex) {
        log.error ex.message, ex
        throw ex
    }
    //finally {
        //sql.close()
    //}
}

PLAYER_FILE.sql имеет следующие данные. Этот файл присутствует в grails-app / sql / PLAYER_FILE.sql

выберите player_Id из мелодий, где player_Id =: playerId

Test.js:

Ext.onReady(function(){ 

// create the Data Store 
var ds = new Ext.data.Store({ 
   autoLoad: true, 
   proxy: new Ext.data.HttpProxy({ 
   url: 'http://localhost:8080/music/tune/listData'}), 
   reader: new Ext.data.JsonReader({ 
    results: 'total', 
    root:'items', 
    id:'id' 
   }, 
   [ 
           {name: 'playerId' } 

      ] 
   ) 
}); 

var cm = new Ext.grid.ColumnModel([ 
    {header: "Player Id", width: 120, dataIndex: 'playerId' }, 

]); 
cm.defaultSortable = true; 

// create the grid 
var grid = new Ext.grid.GridPanel({ 
    ds: ds, 
    cm: cm, 
    renderTo:'grid-example', 
    width:540, 
    height:200 
});    });

Ниже приведен тест, который я написал для своего класса обслуживания. Здесь я получаю пропущенное исключение. Я считаю, что это для строка "def sql = new groovy.sql.Sql (dataSource)". Это то, что упоминается в исключениях. Его рег. это sql. Здесь, в моем тесте, я должен упомянуть источник данных или смоделировать источник данных. Хотя я не слишком уверен.

Мой тестовый пример ниже:

void testReturnList() {          
    TuneService tuneService = new TuneService()     
    List tuneList = tuneService.calculateId()  
    assertTrue(tuneList.size()>0)   
} 

groovy.lang.MissingPropertyException: Нет такого свойства: sql для класса: pride.TuneService Возможные решения: войти в org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap (ScriptBytecodeAdapter.java:49) в org.codehaus.groovy.runtime.callsite.GetEffectivePogoPropertySite.getProperty (GetEffectivePogoPropertySite.java:86) в org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty (AbstractCallSite.java:241) at pride.TuneService.calculateId (TuneService.groovy: 67) at pride.TuneService $ calcId.call (Неизвестный источник) в org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall (CallSiteArray.java:40) в org.codehaus.groovy.runtime.callsite.AbstractCallSite.call (AbstractCallSite.java:117) at pride.TuneServiceTests.testReturnList (TuneServiceTests.groovy: 23) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) at junit.framework.TestCase.runTest (TestCase.java:168) at junit.framework.TestCase.runBare (TestCase.java:134) на junit.framework.TestResult $ 1.protect (TestResult.java:110) в junit.framework.TestResult.runProtected (TestResult.java:128) на junit.framework.TestResult.run (TestResult.java:113) at junit.framework.TestCase.run (TestCase.java:124) на junit.framework.TestSuite.runTest (TestSuite.java:232) на junit.framework.TestSuite.run (TestSuite.java:227) в org.junit.internal.runners.JUnit38ClassRunner.run (JUnit38ClassRunner.java:83) в org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:46) в org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:197)

EDITED: Below is the error that I get after commenting sql.close()

java.lang.NullPointerException: Невозможно получить свойство 'mainContext' для нулевого объекта в org.codehaus.groovy.runtime.NullObject.getProperty (NullObject.java:56) в org.codehaus.groovy.runtime.InvokerHelper.getProperty (InvokerHelper.java:156) в org.codehaus.groovy.runtime.callsite.NullCallSite.getProperty (NullCallSite.java:44) в org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty (AbstractCallSite.java:237) at pride.TuneService.calculateId (TuneService.groovy: 37) at pride.TuneService $ calcId.call (Неизвестный источник) в org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall (CallSiteArray.java:40) в org.codehaus.groovy.runtime.callsite.AbstractCallSite.call (AbstractCallSite.java:117)at pride.TuneServiceTests.testReturnList (TuneServiceTests.groovy: 23) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invokel.java: 25) в java.lang.reflect.Method.invoke (Method.java:597) в junit.framework.TestCase.runTest (TestCase.java:168) в junit.framework.TestCase.runBare (TestCase.java:134) в junit.framework.TestResult $ 1.protect (TestResult.java:110) в junit.framework.TestResult.runProtected (TestResult.java:128) в junit.framework.TestResult.run (TestResult.java:113) в junit.framework.TestCase.run (TestCase.java:124) в junit.framework.TestSuite.runTest (TestSuite.java:232) в junit.framework.TestSuite.run (TestSuite.java:227) в org.junit.internal.runners.JUnit38ClassRunner.run (JUnit38ClassRunner.java:83) в org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:46) в org.eclipse.jt.internal.junit.runner.TestExecution.run (TestExecution.java:38) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) в org.eclipse.jdit.ternalrunner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) по адресу org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) по адресу org.eclipse.jdtun.run.jmain (RemoteTestRunner.java:197)

Как мне написать этот контрольный пример.Мысли?

1 Ответ

0 голосов
/ 21 октября 2010

Я не думаю, что вы дали нам правильный код, чтобы помочь вам отладить эту ошибку. Если вы внимательно изучите трассировку стека, вы увидите, где находится «отсутствующее свойство»:

at pride.RecoveryService.calculateImpact(RecoveryService.groovy:67)

Посмотрите на эту строку. Вероятно, вы ссылаетесь на свойство с именем sql, которое не было определено для метода / closure / class.

Edit:

После вашего обновления я вижу как минимум одну проблему:

String sql = grailsApplication.mainContext.getResource('classpath:' + Constants.PLAYER_FILE).inputStream.text 
def sql = new groovy.sql.Sql(dataSource)  

Вы определяете sql здесь дважды как разные типы. Я отмечаю это только потому, что трассировка вашего стека, похоже, связана с этой переменной.

Можете ли вы указать, какая строка в TuneService.groovy является линией 67?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...