Не удается установить свойство только для чтения в тесте Groovy - PullRequest
0 голосов
/ 26 апреля 2018

Привет всем, я работаю над фиктивным тестом, мой класс расширяет GroovyTestCase, и я пытаюсь установить свойство в методе void setUp, как вы можете видеть в:

 void setUp()
{
    def slurper = new JsonSlurper()
    inData = slurper.parse( new File( "src/test/resources/fixtures/v1/watch/20160511_watch_listings_live_in.json" ), 'UTF-8' )
    outData = slurper.parse( new File( "src/test/resources/fixtures/v1/watch/20160511_watch_listings_live_out.json" ), 'UTF-8' )

    watchPresenter = BinderTestUtils.instanceForLibraryNamed( "dang_v1_watch_presenter" )
    watchPresenter.localTranslate = new LocalTranslateHelperTest( )
    //def info = [ mapper: mapperMock]
    //watchPresenter:[localTranslate:new LocalTranslateHelperTest( )]
    println("watchPresenterTranslate:" + watchPresenter.localTranslate.getStrings("en"))
}

Но яполучаю следующую ошибку:

Невозможно установить свойство readonly: localTranslate для класса WatchListingPresenterTests.

Знаете ли вы, можно ли настроить свойство readOnly, как в этом случае?

В реальном классе я использую скрипт localTranslate, например:

def strings = this.localTranslate.getStrings( params["lang"] )

Мне нужно смоделировать это свойство, но я получаю эту ошибку.

Заранее спасибо.

1 Ответ

0 голосов
/ 03 мая 2018

Я решил эту проблему, используя метакласс для get / setProperty.Документация по метапрограммированию во время выполнения находится по следующей ссылке:

http://groovy -lang.org / metaprogramming.html

Мое решение было очень простым, как вы можете видеть:

watchPresenter.metaClass .localTranslate = new LocalTranslateHelperTest( )

И это сработало отлично.

В любом случае, спасибо.

...