gpt4 book ai didi

unit-testing - 具有Spock模拟功能的Grails单元测试服务

转载 作者:行者123 更新时间:2023-12-02 16:00:15 24 4
gpt4 key购买 nike

目前正在尝试测试Grails 服务(Geb功能测试的经验)

尝试模拟服务将需要的必要数据(例如,用户等)...无论我似乎如何声明/初始化感兴趣的域,它们都在我所有的测试方法中都显示为NULL

我试图一次设置此必需的信息,以便可以通过测试方法重用它。

@TestFor(ReminderService)
@Mock([Reminder, User, Subscriptions, Organisation, UserOrganisation, OrganisationRole, Ref, Role, Title])
class ReminderServiceTests extends Specification {

@Shared user, org, userOrg, roleUser, sub, orgRole, ti, refVals, reminder
def mailService


def setup() {
def refSubStatus = new Ref(value: 'Current').save()
def refSubPublic = new Ref(value: 'No').save()
def refSubType = new Ref(value: 'Subscription Taken').save()
def refRemUnit = new Ref(value: 'Month').save()
def refOrgRole = new Ref(value: 'Subscriber').save()
def refRemMethod = new Ref(value: 'email').save()
def refRemTrigger = new Ref(value: 'Subscription Manual Renewal Date').save()
reminder = new Reminder(user: user, active: true, amount: 1, unit:refRemUnit, reminderMethod:refRemMethod, trigger: refRemTrigger, lastRan:null).save()
refVals = [refSubStatus,refSubPublic, refSubType, refRemUnit, refOrgRole, refRemMethod, refRemTrigger]
roleUser = new Role(authority: 'BASIC_USER', roleType:'global').save()

ti = new Title(title: "A random title....", impId: UUID.randomUUID().toString()).save()
sub = new Subscription(name:"A random subscription name",
status:refSubStatus,
identifier:UUID.randomUUID().toString(),
impId:UUID.randomUUID().toString(),
startDate:new LocalDate().minusYears(1).toDate(),
endDate: new LocalDate().plusMonths(1).toDate(),
isPublic: refSubPublic,
type: refSubType,
renewal: new LocalDate().minusMonths(3).toDate()).save()
org = new Organisation(name: "new org", impId: UUID.randomUUID().toString()).save()
orgRole = new OrganisationRole(sub: sub, roleType: refOrgRole, org: org).save()
user = new User(username: 'j_doe', firstname: "John", lastname: "Doe", email: 'example@googlemail.com', defaultDash: org).save()
userOrg = new UserOrganisation(org: org, user: user, formalRole: roleUser, status: 1).save()
mailService = new MailService()
// mockDomain(Ref, refdataValues)
// mockDomain(Title, ti)
// mockDomain(OrganisationRole, orgRole)
// mockDomain(Organisation, org)
// mockDomain(User, user)
// mockDomain(UserOrganisation, userOrg)
// mockDomain(Reminder, reminder)
}


def "Getting subscriptions for a user"() {
when:
def subscriptions = service.getAuthorisedSubsciptionsByUser(user)

then:
subscriptions != null
subscriptions.size() > 0
}

一切都为空,我已经尝试过使用mockDomain(请参阅 setup()中的注释掉的部分,包括使用 setupSpec()的某些内容不太正确)

最佳答案

您是否尝试过不使用@Shared?正如我现在所看到的,您不需要它。您的引用在规范的整个生命周期中都是共享的,但是您将初始化代码放入了安装程序中,该代码在每个规范之前被调用。这似乎不正确。 @Shared变量内部存储在与普通变量不同的实例中,因此可能存在某种混淆。另外,您可以尝试对@Shared变量使用setupSpec()而不是setup()。

关于unit-testing - 具有Spock模拟功能的Grails单元测试服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32037678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com