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)
...