Kry*_*ian 5 grails unit-testing grails-orm mongodb
在单元测试部分,mongodb-1.1.0GA的文档似乎已经过时了:http://springsource.github.com/grails-data-mapping/mongo/manual/ref/Testing/DatastoreUnitTestMixin.html
以下代码
@TestFor(Employee)
class EmployeeTests extends GroovyTestCase {
void setUp() {
}
void tearDown() {
}
void testSomething() {
mockDomain(Employee)
def s = new Employee(firstName: "first name", lastName: "last Name", occupation: "whatever")
s['testField'] = "testValue"
s.save()
assert s.id != null
s = Employee.get(s.id)
assert s != null
assert s.firstName == "first name"
assert s['testField'] == "testValue"
}
}
Run Code Online (Sandbox Code Playgroud)
失败并出现此错误:
No such property: testField for class: Employee
Run Code Online (Sandbox Code Playgroud)
员工类非常简单:
class Employee {
String firstName
String lastName
String occupation
static constraints = {
firstName blank: false, nullable: false
lastName blank: false, nullable: false
occupation blank: false, nullable: false
}
}
Run Code Online (Sandbox Code Playgroud)
那么,动态属性的单元测试是否可行?如果是的话,怎么样?
对于动态属性没有开箱即用的支持,但添加起来相当容易。我已将以下代码放入我的设置方法中。它将向您使用@TestFor
或启用的任何域类添加动态属性@Mock
。
grailsApplication.domainClasses.each { domainClass ->
domainClass.metaClass.with {
dynamicAttributes = [:]
propertyMissing = { String name ->
delegate.dynamicAttributes[name]
}
propertyMissing = { String name, value ->
delegate.dynamicAttributes[name] = value
}
}
}
Run Code Online (Sandbox Code Playgroud)