无法在Groovy测试

时间:2018-04-26 01:01:06

标签: unit-testing groovy mocking

大家好我正在进行模拟测试,我是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属性:类WatchListingPresenterTests的localTranslate。

您知道是否可以像这种情况那样设置readOnly属性?

在真正的类中,我使用localTranslate脚本,如下所示:

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

我需要模拟这个属性,但是我收到了这个错误。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我使用metaClass for get / setProperty解决了这个问题。有关运行时元编程的文档在下一个链接中:

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

我的解决方案很简单,你可以看到:

watchPresenter.metaClass .localTranslate = new LocalTranslateHelperTest( )

这很有效。

非常感谢。