2013-02-21 5 views
0

меня есть компонентКак дразнить GrailsApplication для модульного тестирования в @component объекта

@Component 
class SomeComponent { 

    @Autowired 
    GrailsApplication grailsApplication 

    String buildString(String someInfo) { 
     return "${grailsApplication.config.my.string}${someInfo}" 
    } 
} 

и тест блока

@TestMixin(ControllerUnitTestMixin) 
class SomeComponent Tests { 


@Test 
void test() { 
    SomeComponent component = new SomeComponent() 

    component.grailsApplication = new Expando() 
    component.grailsApplication.config = [config: [my: [string: 'FOO']]] 

    assert component.buildString('BAR') == 'FOOBAR' 
    } 
} 

Когда я исполню мой тест, который я получил эту ошибку:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '{}' with class 'groovy.util.Expando' to class 'org.codehaus.groovy.grails.commons.GrailsApplication' 

Итак, каков наилучший способ для этого?

+1

Вы пытаетесь впихнуть в Expando.class в собственность определяется как GrailsApplication – dstarh

+0

Да, я пытался поставить размораживание, но у меня был какой-то другой проблема при автообучении – Thermech

ответ

0

Вот как я могу это исправить без использования DEF:

SomeComponent component = new SomeComponent(grailsApplication: grailsApplication) 
component.grailsApplication.config.my.string = 'FOO' 
+1

ControllerUnitTestMixin уже объявляет макет grailsApplication, вы можете использовать это напрямую, а не создавать новый макет. –

+0

Ты так прав! – Thermech