unit-testing - 无法在 Groovy 测试中设置只读属性

标签 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"))
}

但是我遇到了下一个错误:

无法设置只读属性:类 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/

相关文章:

java - 模拟方法作为另一个方法的参数

c# - 对 REST 客户端进行单元测试

angular - Karma-Jasmine:TypeError:无法读取未定义的属性(读取 'get')

c# - 你如何使用 String.IsNullOrEmpty 单元测试代码?

reactjs - Jest 进行 spy 事件时出现类型错误 : Cannot set property getRequest of#<Object> which has only a getter

groovy - 如何在 Groovy 中动态覆盖类的 "each"方法?

javascript - 如何在 Jest 测试用例中默认模拟/考虑 javascript 原型(prototype)函数

java - 有没有比使用单个类更好的方法来提供辅助方法来测试 Web 应用程序?

docker - 无法在 docker 镜像中使用 sdkman 安装 groovy

jenkins - 导出和导入 Jenkins Pipeline 脚本批准