单元测试失败

Unit test fails

我是 Grails 的新手,我想使用 Spock 为服务编写单元测试。但是我有以下问题。

  import grails.transaction.Transactional

    @Transactional
    class BService {

        boolean createB(){
            return true
        }
    ...
    }

为此class我编写了以下测试:

class BServiceTest extends Specification {

    def "test createB"(){
        given:
        def service = new BService()

        when:
        def boolean temp
        temp = service.createB()

        then:
        temp == true
    }
}

我在 运行 这个测试中遇到的错误如下:

java.lang.IllegalStateException: No transactionManager was specified. Using @Transactional or @Rollback requires a valid configured transaction manager. If you are running in a unit test ensure the test has been properly configured and that you run the test suite not an individual test method.

and it shows in GrailsTransactionTemplate.groovy:60

如果有人能给我提示,我将不胜感激。

为你的单元测试添加一个@TestFor(BService)注解并使用它自动提供的服务实例。有关测试的更多信息,请参阅 http://grails.github.io/grails-doc/3.0.x/guide/testing.html

感谢 ataylor 的回复。但是我犯了一个错误,所以我现在要回答我自己的问题。

首先,名称转换错误。当我在 grails 中创建服务时,会自动为此设置一个 unit-test,所以在那种情况下我会:

@TestFor(BService)
class BServiceSpec extends Specification {

    def setup() {
        User u = new User(1)
        u.save()
    }

    def cleanup() {
    }

    def "test something"(){
    }
}

在这种情况下,当我编写单元测试时,它会运行。 我之前做的测试是功能测试,我无法从域中传递对象,所以我有事务管理器的错误。