大家好,我正在进行模拟测试,我的类扩展了 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"))
}
但是我遇到了下一个错误:
无法设置只读属性:类 WatchListingPresenterTests 的 localTranslate。
您知道在这种情况下是否可以设置只读属性吗?
在真正的类里面,我正在使用 localTranslate 脚本,就像这样:
def strings = this.localTranslate.getStrings( params["lang"] )
我需要模拟此属性,但出现此错误。
提前致谢。
最佳答案
我使用 get/setProperty 的元类解决了这个问题。有关运行时元编程的文档在下一个链接中:
http://groovy-lang.org/metaprogramming.html
如您所见,我的解决方案非常简单:
watchPresenter.metaClass .localTranslate = new LocalTranslateHelperTest( )
这非常有效。
还是谢谢你
关于unit-testing - 无法在 Groovy 测试中设置只读属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50033324/