在 Grails 中编写超级简单测试的问题
Issues with writing super simple test in Grails
我有一个域class用户:
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'
}
}
}
其中 AuditableEntity 只有可为空的字段。
我也有一个简单的服务class UserService:
@Transactional
class UserService {
@Transactional(readOnly = true)
User getByGoogleId(String googleId) {
def user = User.notDeleted.findByGoogleId(googleId)
user
}
}
我正在尝试为服务 class 编写单元测试,同时模拟用户域:
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"
}
}
这个测试失败了,因为它出于某种原因没有创建用户对象。 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)
...
我模仿了你的设置,这就是所需要的。
我有一个域class用户:
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'
}
}
}
其中 AuditableEntity 只有可为空的字段。
我也有一个简单的服务class UserService:
@Transactional
class UserService {
@Transactional(readOnly = true)
User getByGoogleId(String googleId) {
def user = User.notDeleted.findByGoogleId(googleId)
user
}
}
我正在尝试为服务 class 编写单元测试,同时模拟用户域:
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"
}
}
这个测试失败了,因为它出于某种原因没有创建用户对象。 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)
...
我模仿了你的设置,这就是所需要的。