Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行Grails服务单元测试的IllegalStateException_Java_Unit Testing_Grails_Grails 3.3 - Fatal编程技术网

Java 运行Grails服务单元测试的IllegalStateException

Java 运行Grails服务单元测试的IllegalStateException,java,unit-testing,grails,grails-3.3,Java,Unit Testing,Grails,Grails 3.3,我有一个简单的grails服务: @Transactional class SearchService { def doSomething() { 10 } } 通过简单的单元测试: class SearchServiceSpec extends Specification implements ServiceUnitTest<SearchService>{ def setup() { } def cleanup() {

我有一个简单的grails服务:

@Transactional
class SearchService {
    def doSomething() {
        10
    }
}
通过简单的单元测试:

class SearchServiceSpec extends Specification implements ServiceUnitTest<SearchService>{

    def setup() {
    }

    def cleanup() {
    }

    void "test something"() {
        expect:
        service.doSomething() == 10
    }
}
类SearchServiceSpec扩展规范实现ServiceUnitTest{
def设置(){
}
def cleanup(){
}
无效“测试某物”(){
期望:
service.doSomething()==10
}
}
运行测试时,出现以下异常:

有人知道这是什么意思吗

奇怪的是,如果我将
doSomething
更改为
getSomething
,然后执行
服务。something

我有以下版本: |Grails版本:3.3.0 |Groovy版本:2.4.11
|JVM版本:1.8.0_60

这是因为getter方法没有应用事务行为。要测试事务性方法,您需要有一个GORM实现设置。测试中最简单的方法是使用“get”方法实现
grails.testing.gorm.DataTest

,这正是他们在文档中所拥有的:向类添加@Mock()注释,它应该连接gorm并工作。(3.3之前的Grails)。我不知道他们是如何在3.3中对其进行更改的。如果能在“单元测试服务”部分的官方文档中对此进行记录,那就太好了。由于默认情况下服务是通过事务行为生成的,所以文档中必须包含这一点,这是一个重要的事实。然后我鼓励您向文档提交PR。这就解决了问题。我同意@bassmartin的观点,没有这么一篇帖子,我不可能弄明白这一点。