我有一组域和控制器类,分别叫做:Organization和OrganizationController。
组织控制器只有一个方法:
def index() {
def organizations = Organization.list()
[orgs: organizations]
}
我试图通过两种方式模拟Domain类。
第一种方法是使用@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。
答案 0 :(得分:1)
第一个片段似乎没问题,但是......
首先,实际创建了Organization
个对象?是否提供了所有必填字段?请尝试使用save(failOnError: true)
确认。
此外,在控制器中,您使用orgs
,而在测试中使用org
。这只是一个拼写错误吗?
此外,除非您在equals
类中覆盖Organization
方法,否则数据库中的对象与您使用new
运算符创建的对象不同。