Grails中的模拟域类
问题描述:
我有一组名为Organization和OrganizationController的域和控制器类。Grails中的模拟域类
的OrganizationController只有一个方法:
def index() {
def organizations = Organization.list()
[orgs: organizations]
}
我试着通过2种方式来模拟出域类。
第一种方式是使用@Mock注释,并创建对象和保存:
void "test index"() {
given:
new Organization(name: 'JIMJIM').save()
new Organization(name: 'ABC').save()
def expected = [org: [new Organization(name: 'JIMJIM'),
new Organization(name: 'ABC')]]
when:
def actual = controller.index()
then:
actual == expected
}
导致Oraganization.list返回一个空列表。实际收益[ORG:[]
我使用mockDomain也试过:
void "test index"() {
given:
mockDomain(Organization, [new Organization(name: 'JIMJIM'),
new Organization(name: 'ABC')
])
def expected = [org: [new Organization(name: 'JIMJIM'),
new Organization(name: 'ABC')]]
when:
def actual = controller.index()
then:
actual == expected
}
但是我仍然得到了同样的结果。为什么我的域名不会被嘲笑?
我的测试装饰(OrganizationControllerSpec)如下:
@TestFor(OrganizationController)
@Mock(Organization)
@TestMixin(DomainClassUnitTestMixin)
class OrganizationControllerSpec extends Specification {
我使用Grails 2.3.8。
答
的第一个片段似乎是确定的,但...
首先,进行了Organization
对象实际创建?是否提供了所有必填字段?请尝试使用save(failOnError: true)
来确保。
此外,在控制器中,您有orgs
,而您在测试中使用org
。这只是一个拼写错误吗?
此外,除非Organization
类中有equals
方法被覆盖,否则来自数据库的对象不等于您使用new
运算符创建的对象。
你说的对! – monksy 2014-12-02 08:37:31