![](/img/trans.png)
[英]java.lang.NullPointerException: Cannot invoke method queryForList() on null object
[英]grails unit test - java.lang.NullPointerException: Cannot invoke method finish() on null object
我無法在grails中運行單元測試。 我有一個TransactionController (也可以在github上找到 ),它帶有方法transactionAnalytics
,我想按以下方法進行測試,
package eccount
import org.codehaus.groovy.grails.web.json.JSONObject
import org.springframework.dao.DataIntegrityViolationException
import grails.converters.JSON
class TransactionController {
def transactionService
def transactionAnalytics = {
searchRequest = searchRequest ?: new SearchRequest(requestParams: new HashMap<String, String>())
configureRequestParams()
def responseBytes = transactionService.getSearchResponse(searchRequest)
def jsonResponse
if (responseBytes)
jsonResponse = JSON.parse(responseBytes)
else
jsonResponse = new JSONObject()
render jsonResponse as JSON
}
}
TransactionController#transactionAnalytics
相應測試( 也可以在github上找到 )如下所示,
package eccount
import org.junit.*
import grails.test.mixin.*
@TestFor(TransactionController)
class TransactionControllerTests {
def INDEX_NAME = "gccount"
void testTransactionAnalytics(){
Map<String, String> params = new HashMap<String, String>()
params.put("indexName",INDEX_NAME)
//println params.get("indexName")
//controller.params = params
controller.params.indexName = "gccount"
controller.transactionAnalytics()
def jsonResponse = controller.response.json
println jsonResponse
}
}
當我運行Controller的方法時,出現以下異常
prayag@prayag:/backup/gccount$ grails test-app TransactionController.transactionAnalytics
| Environment set to test.....
| Running 1 unit test...
| Failure: Test mechanism
| java.lang.NullPointerException: Cannot invoke method finish() on null object
at org.junit.runner.notification.RunNotifier$2.notifyListener(RunNotifier.java:71)
at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:41)
at org.junit.runner.notification.RunNotifier.fireTestRunFinished(RunNotifier.java:68)
at _GrailsTest_groovy$_run_closure4.doCall(_GrailsTest_groovy:290)
at _GrailsTest_groovy$_run_closure2.doCall(_GrailsTest_groovy:248)
at _GrailsTest_groovy$_run_closure1_closure21.doCall(_GrailsTest_groovy:195)
at _GrailsTest_groovy$_run_closure1.doCall(_GrailsTest_groovy:184)
at TestApp$_run_closure1.doCall(TestApp.groovy:82)
| Completed 0 unit test, 1 failed in 2723ms
| Packaging Grails application.....
[scalaPlugin] Compiling Scala sources from plugins to /home/prayag/.grails/2.1.1/projects/cashless/plugin-classes
[scalaPlugin] Compiling Scala sources to /backup/gccount/target/classes
| Compiling 2 source files
Configuring Spring Security Core ...
... finished configuring Spring Security Core
sandbox user created
role created
stall created with a user
| Tests FAILED - view reports in /backup/gccount/target/test-reports
同樣, file:///backup/gccount/target/test-reports
上沒有任何file:///backup/gccount/target/test-reports
。 無論如何,這里實際上誰是空的?
http://mrhaki.blogspot.com/2010/04/grails-goodness-invoking-single-test.html
嘗試:
grails test-app TransactionController.testTransactionAnalytics
您忘記了方法名前面的“測試”……是的……看來,您不必在類名中編寫它,但是在方法名中您必須……
Grails的優點:調用單個測試方法似乎發布了錯誤的信息,因為遵循以下代碼將無法正常工作。
$ grails test-app TransactionController.transactionAnalytics
正確的方法是使用初始化的transactionService
$ grails test-app TransactionControllerTests.testTransactionAnalytics
要么
$ grails test-app TransactionController.testTransactionAnalytics
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.