在 Grails 2.2 中是不是可以对 mongodb 动态属性进行单元测试?
Posted
技术标签:
【中文标题】在 Grails 2.2 中是不是可以对 mongodb 动态属性进行单元测试?【英文标题】:Is unit testing of mongodb dynamic attributes possible in Grails 2.2?在 Grails 2.2 中是否可以对 mongodb 动态属性进行单元测试? 【发布时间】:2013-01-27 22:04:35 【问题描述】: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"
失败并出现此错误:
No such property: testField for class: Employee
Employee 类非常简单:
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
那么,是否可以对动态属性进行单元测试?如果是,如何?
【问题讨论】:
【参考方案1】:动态属性没有开箱即用的支持,但添加起来相当容易。我已将以下代码放入我的设置方法中。它将为您使用@TestFor
或@Mock
启用的任何域类添加动态属性。
grailsApplication.domainClasses.each domainClass ->
domainClass.metaClass.with
dynamicAttributes = [:]
propertyMissing = String name ->
delegate.dynamicAttributes[name]
propertyMissing = String name, value ->
delegate.dynamicAttributes[name] = value
【讨论】:
它会创建静态的东西吗?如果我将它设置为一个,我会为所有项目获得相同的值! 是的,我的错。使用for
循环这样做(我在博客上写了为什么blog.freeside.co/2013/03/29/…)我会更新答案
我已经编辑了你的答案!这对我有用!随意批准或拒绝我的回答!我认为你最好也更新你的博客!
我不明白。我已经对其进行了编辑,并且该博客包含正确的信息。
这个特殊的解决方案不起作用!当一个实例被更改时,该域类的所有实例都被更改!在这里查看我的问题以及我的解决方案:***.com/questions/27312245/…以上是关于在 Grails 2.2 中是不是可以对 mongodb 动态属性进行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章
Grails 数据绑定:对 domainInstance.properties = params 没有影响