你使用的是什么版本的groovy?这对我来说工作正常使用Groovy 1.8.6,我认为它是这样工作了很长一段时间:
class Person {
def firstName
def lastName
def getFullName() {
return "$firstName $lastName"
}
def setFullName(name) {
firstName = name.split(" ")[0]
lastName = name.split(" ")[1]
}
}
def p1 = new Person(firstName: "Joe", lastName: "Bloggs")
def p2 = new Person(fullName: "Joe Bloggs")
assert p1.firstName == p2.firstName
assert p1.lastName == p2.lastName
更新时间:
只是尝试这样做对Grails的2.0.3。您需要在方法签名中更加明确地使用grails工作。我将吸气剂的方法签名更改为String
,并将设定器更改为void
,并使用该方法。它只适用于def
。 Grails 2对匹配签名的要求比以前版本的Grails更严格,我敢打赌这是它的一部分。
此外,您应该指定fullName
“属性”是暂时的,因为它不是一个应该保留在数据库中的实际属性。下面是在Grails的2.0.3为我工作的领域和测试类:
Person.groovy:
package com.example
class Person {
String firstName
String lastName
static transients = ["fullName"]
String getFullName() {
return "$firstName $lastName"
}
void setFullName(String name) {
firstName = name.split(" ")[0]
lastName = name.split(" ")[1]
}
}
PersonTests.groovy:
package com.example
import grails.test.mixin.*
import org.junit.*
/**
* See the API for {@link grails.test.mixin.domain.DomainClassUnitTestMixin} for usage instructions
*/
@TestFor(Person)
@Mock([Person])
class PersonTests {
void testFullName() {
Person p1 = new Person(firstName: "Joe", lastName: "Bloggs").save(failOnError: true)
Person p2 = new Person(fullName: "Joe Bloggs").save(failOnError: true)
assert p1.firstName == p2.firstName
assert p1.lastName == p2.lastName
assert p1.fullName == p2.fullName
}
}
作为grails域模型? –
你是对的。这在groovy中起作用,我认为它失败的地方是Grails框架。 –