使用Grails对域类进行单元测试

时间:2017-01-03 08:00:13

标签: unit-testing grails groovy

目前正在搜索教程,解释和示例。 我尝试了不同的例子,并遇到了不同的错误。 我目前的错误是:

  

|错误编译错误编译[unit]测试:启动失败:

在我的测试报告中。它输出:

单元测试结果 - 摘要 没有执行任何测试。

我的“UserSpec.groovy”代码是这样的:

package newmyproject245

import grails.test.mixin.*
import spock.lang.Specification

@TestFor(User)
class UserSpec extends ConstraintSpecification {

    def setup() {
        Expectations.applyTo User
    }

    def cleanup() {
    }

    void testShouldDoNothing() {
        Expectations.applyTo User

        user."password is not blank"
        user."password is not nullable"
        user."name is not blank"
        user."name is not nullable"
    }

    void testEventNameConstraints() {
        Expectations.applyTo User
        def user = new User()

        user."name is not blank"
        user."name is not nullable"
    }
}

任何人都可以提供帮助。我是grails的新手。 谢谢!

除上述问题外, 当我在课程中省略 Contraints 时如下所示:

class UserSpec extends Specification {

我遇到了这个错误:

  

|运行1单元测试... 1 of 1   |失败:initializationError(org.junit.runner.manipulation.Filter)   | java.lang.Exception:没有找到匹配grails测试目标的测试   模式过滤器来自org.junit.runner.Request$1@12c27788     at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:35)     在org.junit.runner.JUnitCore.run(JUnitCore.java:138)   |完成1个单元测试,1个在0m 0s失败   |错误运行测试时发生致命错误:非空属性引用瞬态值 - 必须在当前操作之前保存瞬态实例:newmyproject245.Order.product - > newmyproject245.Product;嵌套异常是org.hibernate.TransientPropertyValueException:非null属性引用瞬态值 - 必须在当前操作之前保存瞬态实例:newmyproject245.Order.product - > newmyproject245.Product(使用--stacktrace查看完整的跟踪)

有人帮忙。再次,谢谢!

1 个答案:

答案 0 :(得分:0)

我已经得到了答案。请参阅代码以供参考:

<强> UserSpec.groovy

package project101

import grails.test.mixin.TestMixin
import grails.test.mixin.support.GrailsUnitTestMixin
import spock.lang.Specification

/**
 * See the API for {@link grails.test.mixin.support.GrailsUnitTestMixin} for usage instructions
 */
@TestMixin(GrailsUnitTestMixin)
@TestFor(User)
class UserSpec extends Specification {

    def user

    def setup() {
        user = new User(firstName: 'FIRSTNAME', lastName: 'LASTNAME', address: 'Finland', username: 'user1', password: 'pass123', userType: 'ADMIN')

    }

    def cleanup() {
        user = null
    }

    void "Test if User handles"() {
        given:
            setup()
        when: "User field has null value"
            user?.username = null
        then: "Validation returns false"
            user?.validate() == false
            user?.errors?.hasFieldErrors('username') == true
    }
}

并确保 测试环境 dbCreate 为“create-drop”以避免此类错误。在 DataSource.groovy

中找到
test {
        dataSource {
            pooled = true
            dbCreate = "create-drop"

此致

谢谢! (^ _〜)