Java Groovy getter/setter速记符号和API更改

Java Groovy getter/setter速记符号和API更改,java,groovy,integration,getter-setter,Java,Groovy,Integration,Getter Setter,我继承了一个依赖于Java编写的API的大型groovy应用程序。groovy应用程序在Java API中使用速记getter和setter方法: context.getItem().getValue().getNodeName().getText() [java] context.item.value.nodeName.text [groovy] JavaAPI正在快速开发,并且经常发生变化 这带来了一个问题,因为Java API中的更改在groovy代码编译时不会显示为错误;集成测试变得毫

我继承了一个依赖于Java编写的API的大型groovy应用程序。groovy应用程序在Java API中使用速记getter和setter方法:

context.getItem().getValue().getNodeName().getText() [java]
context.item.value.nodeName.text [groovy]
JavaAPI正在快速开发,并且经常发生变化

这带来了一个问题,因为Java API中的更改在groovy代码编译时不会显示为错误;集成测试变得毫无用处。相反,它们成为运行时异常


除了单元测试之外,有没有什么方法可以确定这些getter和setter方法的调用位置,或者找到可能出现错误的地方?其他人是如何解决这个问题的?

我不知道你所说的“集成测试变得无用”是什么意思, 但是,正如您所发现的,静态语言和动态语言之间的一个主要区别是,静态语言中的编译时错误会变成动态语言中的运行时错误

典型的解决方案实际上更加依赖于测试,包括单元测试和集成测试。因此,TDD(测试驱动设计)被使用动态语言的人们大量采用


“Groovy++”可能会有所帮助,它是Groovy语言的静态类型扩展。请参见

我不确定您所说的“集成测试变得无用”是什么意思, 但是,正如您所发现的,静态语言和动态语言之间的一个主要区别是,静态语言中的编译时错误会变成动态语言中的运行时错误

典型的解决方案实际上更加依赖于测试,包括单元测试和集成测试。因此,TDD(测试驱动设计)被使用动态语言的人们大量采用

“Groovy++”可能会有所帮助,它是Groovy语言的静态类型扩展。作为灰胡子的极客,测试在这方面会有很大帮助。事实上,我认为您对应用程序的测试越彻底,您就越有信心重构(或API更改)不会破坏任何东西,这会让您感觉很棒:)

然而,好的工具也会有所帮助。IntellijIDEA具有一些很棒的Groovy代码检查/重构功能。它在推断表达式类型方面做得非常好,因此大多数情况下重构都能正常工作™.

作为灰胡子的极客,测试在这方面会有很大帮助。事实上,我认为您对应用程序的测试越彻底,您就越有信心重构(或API更改)不会破坏任何东西,这会让您感觉很棒:)


然而,好的工具也会有所帮助。IntellijIDEA具有一些很棒的Groovy代码检查/重构功能。它在推断表达式类型方面做得非常好,因此大多数情况下重构都能正常工作™.

+1表示groovy++。将类型声明为“静态”应该会提高性能,并在编译时发现错误。我想我的意思是,所有组件的简单夜间构建不再工作(连续集成构建),而这些组件在过去一直在工作,以确保我们的代码在基本级别上正常工作。我对混合静态和动态类型的语言非常陌生;因此,这非常有用。+1对于groovy++。将类型声明为“静态”应该会提高性能,并在编译时发现错误。我想我的意思是,所有组件的简单夜间构建不再工作(连续集成构建),而这些组件在过去一直在工作,以确保我们的代码在基本级别上正常工作。我对混合静态和动态类型的语言非常陌生;这是非常有用的。我正在使用eclipse和Groovy插件。其他开发人员正在使用IntelliJ,但只是作为编辑器。问题在于说服他们使用重构工具我正在使用eclipse和Groovy插件。其他开发人员正在使用IntelliJ,但只是作为编辑器。问题在于说服他们使用重构工具