Я пишу кейсы для моего класса обслуживания. Ниже мой код в контроллере:
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)
Как мне написать этот контрольный пример.Мысли?