Unit testing 在grails中重写域属性的setter是否正确?
重写域类中属性的setter和getter是个好主意吗?假设我们有一个具有name属性和大写名称的域类,我们在其中存储清理名称:Unit testing 在grails中重写域属性的setter是否正确?,unit-testing,grails,gorm,grails-domain-class,Unit Testing,Grails,Gorm,Grails Domain Class,重写域类中属性的setter和getter是个好主意吗?假设我们有一个具有name属性和大写名称的域类,我们在其中存储清理名称: class Person { String name String capitalizedName String setName(String name){ this.name = name this.searchName = name.replaceAll("[^A-Za-z0-9 ]", "").trim(
class Person {
String name
String capitalizedName
String setName(String name){
this.name = name
this.searchName = name.replaceAll("[^A-Za-z0-9 ]", "").trim().toUpperCase()
}
}
如果我重写setter并在单元测试中尝试使用dynamic finder:
Person.findByName('Whatever')
我得到
java.lang.IllegalArgumentException: Property [name] is not a valid property of class [com.test.Person]
但在运行时,它工作得很好
我可以修改域类的getter和setter吗?实现上述行为的最佳方式是什么 setter的返回类型应为
void
void setName(String name){
this.name = name
this.searchName = name.trim().replaceAll("[^A-Za-z0-9 ]", "").replaceAll(" +", " ").toUpperCase()
}
setter的返回类型应为
void
void setName(String name){
this.name = name
this.searchName = name.trim().replaceAll("[^A-Za-z0-9 ]", "").replaceAll(" +", " ").toUpperCase()
}
我没想到返回类型会是原因,但我试过了,它确实很重要。Thx,没有注意到。看起来我的代码库有很多这样的问题。我没想到返回类型会是原因,但我试过了,这很重要。Thx,没有注意到。看起来我的代码库有很多这样的问题。