Unit testing 在Grails中编写超级简单测试的问题

Unit testing 在Grails中编写超级简单测试的问题,unit-testing,grails,mocking,gorm,Unit Testing,Grails,Mocking,Gorm,我有一个域类用户: class User extends AuditableEntity { private static final long serialVersionUID = 1 String username String password String email String googleId String linkedinId boolean enabled = true boolean accountExpir

我有一个域类用户:

class User extends AuditableEntity {

    private static final long serialVersionUID = 1

    String username
    String password
    String email
    String googleId
    String linkedinId
    boolean enabled = true
    boolean accountExpired
    boolean accountLocked
    boolean passwordExpired

    Set<Role> getAuthorities() {
        (UserRole.findAllByUser(this) as List<UserRole>)*.role as Set<Role>
    }

    static constraints = {
        password nullable: true, blank: true, password: true
        username nullable: false, blank: false, unique: true
        email nullable: false, blank: false, unique: true
        googleId nullable: true, blank: true, unique: true
        linkedinId nullable: true, blank: true, unique: true
    }

    static mapping = {
        password column: '`password`'
        googleId column: 'google_id'
        linkedinId column: 'linkedin_id'
    }

    static namedQueries = {
        notDeleted {
            isNull 'deletedAt'
        }
    }
}
我试图在模拟用户域时为服务类编写单元测试:

class UserServiceSpec extends Specification implements ServiceUnitTest<UserService>, DataTest {

    def setupSpec() {
        mockDomain User
    }

    void "getByGoogleId"() {
        setup:
        new User(
                username: "username",
                googleId: "googleId",
                email: "user@domain.com",
                enabled: true,
                accountExpired: false,
                accountLocked: false,
                passwordExpired: false
        ).save(failOnError: true)

        when:
        def user = service.getByGoogleId("googleId")

        then:
        User.count() == 1
        user.username == "username"
    }
}
类UserServiceSpec扩展规范实现ServiceUnitTest、DataTest{ def setupSpec(){ 模拟域用户 } 无效“getByGoogleId”(){ 设置: 新用户( 用户名:“用户名”, 谷歌ID:“谷歌ID”, 电子邮件:“user@domain.com", 启用:对, 帐户过期:false, accountLocked:false, 密码过期:false ).save(failOnError:true) 什么时候: def user=service.getByGoogleId(“googleId”) 然后: User.count()==1 user.username==“用户名” } } 此测试失败,因为它出于某种原因没有创建用户对象
User.count()
为0。 这不是验证问题,因为没有域验证错误(以前是)


我做错了什么?

在创建域时尝试添加刷新:

...
new User(
    username: "username",
    googleId: "googleId",
    email: "user@domain.com",
    enabled: true,
    accountExpired: false,
    accountLocked: false,
    passwordExpired: false
    ).save(failOnError: true, flush: true)
...

我模仿了您的设置,这就是所需的全部内容。

谢谢。我想知道为什么它没有以任何方式记录下来。查看这里的保存文档,我猜没有刷新,插入是由hibernate批处理的&因为在此之后没有其他更新发生,所以插入不会执行
...
new User(
    username: "username",
    googleId: "googleId",
    email: "user@domain.com",
    enabled: true,
    accountExpired: false,
    accountLocked: false,
    passwordExpired: false
    ).save(failOnError: true, flush: true)
...