2

При использовании сгенерированного теста интеграции (grails create-integration-test package.ServiceName) Я не могу использовать введенную службу в тесте - в плагине Grails ,Почему инъекция зависимостей в рамках теста интеграции не работает при разработке моего плагина grails

Он бросает очень бесполезный NullPointerException

Однако, тот же самый процесс - но не используется в приложении Grails (Grails создать-приложение) работает без проблем вообще.

Вы можете дублировать это следующим образом:

> grails create-plugin myServicePlugin

>grails test-app // Передает как ожидалось

>grails create-service testing.DummyService

Alter \myServicePlugin\test\unit\testing\DummyServiceSpec.groovy Смените

void "test something"() { 
} 

Для

void "test something"() { 
    expect: 
    def x = true 
} 

>grails test-app // Передает

>grails create-integration-test testing.DummyService

Alter \myServicePlugin\test\integration\testing\DummyServiceSpec.groovy Изменить

void "test something"() { 
} 

К

void "test something"() { 
    expect: 
    def x = true 
} 

>grails test-app integration: // Пропускной путь

Все до сих пор. Теперь, чтобы изменить DummyService сделать что-то errmm .. Манекен-иш

Alter \myServicePlugin\grails-app\services\testing\DummyService.groovy

Добавить

def dummySpit(){ 
    return true 
} 

после def serviceMethod(){}

Теперь, чтобы ввести услугу в испытательную Spec

Alter \myServicePlugin\test\integration\testing\DummyServiceSpec.groovy

Добавить def dummyService

Ниже

class DummyServiceSpec extends Specification { 

И изменить тело "test something" метод для:

expect: 
    assert dummyService.dummySpit() 

И это, где мир падает.

>grails test-app integration:

|Loading Grails 2.3.5 
|Configuring classpath 
. 
|Environment set to test 
............... 
|Compiling 1 source files 
........ 
|Running without daemon... 
....................................... 
|Compiling 1 source files 
. 
|Running 1 integration test... 
|Running 1 integration test... 1 of 1 
Failure: | 
test something(testing.DummyServiceSpec) 
| 
java.lang.NullPointerException 
    at testing.DummyServiceSpec.test something(DummyServiceSpec.groovy:22) 
|Completed 1 integration test, 1 failed in 0m 0s 
.Tests FAILED 
| 
- view reports in G:\workspace\myServicePlugin\target\test-reports 
Error | 
Forked Grails VM exited with error 
+0

Я знаю, что это был мой первый SO сообщение .. но почему-вниз голосование по этому вопросу? Я могу понять голосующий ответ ... но вопрос? Что с этим не так? – stevecowling

+0

Отредактированный вопрос, удаляя тривиальные вещи и подчеркивая суть проблемы. – dmahapatro

+0

Что в строке 22 DummyServiceSpec? –

ответ

0

На каком-то этапе create-plugin катит остановился в том числе спящий режим, как зависимость.

Если вы добавляете hibernate обратно в качестве зависимости, вышеуказанный интеграционный тест должен выполняться. т.е.

Alter \myServicePlugin\grails-app\conf\BuildConfig.groovy

Добавить runtime ":hibernate:3.6.10.7" в plugins {} блок

ПРИМЕЧАНИЯ Принимая во внимание ответа на @dmahapatro - это было бы лучше практика не экспортировать спящий режим плагина. Таким образом, чтобы избежать этого вы можете:

test (":hibernate:3.6.10.7"){ 
    export = false 
} 

>grails test-app integration:

|Loading Grails 2.3.5 
|Configuring classpath 
. 
|Environment set to test 
........ 
|Installing zip hibernate-3.6.10.7.zip... 
... 
|Installed plugin hibernate-3.6.10.7 
.................... 
|Compiling 1 source files 
....... 
|Compiling 5 source files 
........... 
|Running without daemon... 
............................................. 
|Compiling 1 source files 
. 
|Running 1 integration test... 
|Running 1 integration test... 1 of 1 
|Completed 1 integration test, 0 failed in 0m 0s 
. 
|Tests PASSED - view reports in G:\workspace\myServicePlugin\target\test-reports 
+0

Вы не должны этого делать. – dmahapatro

+0

@dmahapatro Вы одобряете решение, если плагин включен с использованием области 'test' и' export = false'? – stevecowling

+0

Если бы я был вами, я бы не использовал его только для прохождения моих тестов и, если не было требований. :) Это зависит от вашего использования, вы можете пойти дальше, если это не создает никаких проблем. – dmahapatro