【发布时间】:2014-10-23 16:43:06
【问题描述】:
鉴于我是 grails 的新手,我正在尝试测试一个工厂类。 Factory 类位于 src 文件夹中,因为我不希望它作为服务。
class UserFactory {
static Map userDefaults = [
email : 'usermail@test.it',
alias : 'myalias',
firstName : 'Antonio',
lastName : 'Roma',
password : 'asdhjs',
placeOfBirth : 'Milan',
placeOfResidence: 'Berlin',
dateOfBirth : new Date() - 4000
]
static User build(Map properties, Map options = [persisted: true]) {
userDefaults.putAll properties
def user = new User(userDefaults)
if (options.persisted) { user.save() }
return user
}
static Collection<User> build(Collection<Map> properties, Map options = [persisted: true]) {
properties.collect { build(it, options) }
}
}
我想测试用户是否通过 GORM 正确创建和存储。这里是集成测试:
@TestMixin(DomainClassUnitTestMixin)
class UserFactoryIntegrationSpec extends Specification {
def setup() {
mockDomain(User)
}
def cleanup() {
}
void "create user"() {
when:
User user = UserFactory.build([alias: 'xx', email: 'xx@gmail.com'])
then:
User.count() == 1
user.alias == 'xx'
user.email == 'xx@gmail.com'
user.id != null
}
void "create users"() {
when:
Collection<User> users = UserFactory.build([[alias: 'xx', email: 'xx@gmail.com'], [alias: 'yy', email: 'yy@gmail.com']])
then:
users.size() == 2
users.alias == ['xx', 'yy']
users.email == ['xx@gmail.com','yy@gmail.com']
users.id != [null, null]
}
}
用户没有被存储,我猜 GORM 没有正确加载......我错过了一些注释吗?!这里是测试应用集成的结果:UserFactoryIntegrationSpec
User.count() == 1
| |
0 false
users.id != [null, null]
| | |
| | false
| [null, null]
[rigel.resources.User : (unsaved), rigel.resources.User : (unsaved)]
【问题讨论】:
-
将构建选项放入静态地图是一条毁灭之路。您将一块一块地破坏地图(每次调用),并且您在那里有一个竞争条件!
-
检查你的
save()调用的结果,如果它是假的,你必须查看user.errors。或者您可以将failOnErrors:true传递给您的保存调用或validate()用户事先。 -
感谢@cfrick!我没注意到...我已经修好了!
标签: grails testing integration-testing