gpt4 book ai didi

grails - Grails 2.2.3和Spock 0.7的类广播异常

转载 作者:行者123 更新时间:2023-12-02 15:10:35 25 4
gpt4 key购买 nike

以下是我们正在做的事情,它在grails 2.0.0和spock 0.6中起作用

一个简单的域:

package com.grails
class User {
String name, password
def methodWithNoArguments(){
return "Object: methodWithNoArguments"
}
static constraints = {
}
}

单位规格:
package com.grails

import spock.lang.*
import grails.test.mixin.TestFor
import grails.test.mixin.Mock
import grails.test.GrailsMock

@TestFor(UserController) // testing for
@Mock([User]) // collaborators class
UserControllerSpec extends Specification {
// DOES NOT work in 2.2.3 spock 0.7,
// WORKS in grails-2.0.0 spock 0.6
def 'create a Domain collaborator using Mock'() {
given: 'user'
// can't mock this anymore, causes classcast exception.
User user = Mock(User)

user.methodWithNoArguments() >> { "Mock: (3) methodWithNoArguments" }

when: 'we call the method'
def val1 = user.methodWithNoArguments()

then: 'value should be from the mocked method'
val1 == "Mock: (3) methodWithNoArguments"
} }

上面在grails 2.2.3和spock 0.7中导致以下异常。注意(它适用于grails-2.0.0和spock 0.6)

| java.lang.ClassCastException:com.grails.User无法转换为net.sf.cglib.proxy.Factory
在org.spockframework.mock.runtime.ProxyBasedMockFactory $ CglibMockFactory.createMock(ProxyBasedMockFactory.java:93)
在org.spockframework.mock.runtime.ProxyBasedMockFactory.create(ProxyBasedMockFactory.java:49)
在org.spockframework.mock.runtime.JavaMockFactory.create(JavaMockFactory.java:51)
在org.spockframework.mock.runtime.CompositeMockFactory.create(CompositeMockFactory.java:44)
在org.spockframework.lang.SpecInternals.createMock(SpecInternals.java:47)
在org.spockframework.lang.SpecInternals.createMockImpl(SpecInternals.java:282)
在org.spockframework.lang.SpecInternals.MockImpl(SpecInternals.java:99)
在com.grails.UserControllerSpec.com上使用Mock创建一个域协作者(UserControllerSpec.groovy:94)

想知道是否可能存在一些不兼容的库,这是BuildConfig.groovy
dependencies {
test "org.spockframework:spock-grails-support:0.7-groovy-2.0"
}

plugins {
runtime ":hibernate:$grailsVersion"
runtime ":jquery:1.8.3"
runtime ":resources:1.2"

build ":tomcat:$grailsVersion"

runtime ":database-migration:1.3.2"

compile ':cache:1.0.1'
test(":spock:0.7") {
exclude "spock-grails-support"
}
}

样本测试应用位于git@github.com:nbostech / grails-spock-2.2.3.git

git checkout grails-2.0.0; <2.0.0> / bin / grails test-app --unit UserControllerSpec; //所有测试通过

git checkout master; <2.2.3> / bin / grails test-app --unit UserControllerSpec; //其中一项测试失败。

最佳答案

Grails和Spock模拟并非旨在以这种方式进行混合。将其设置为Grails @Mock或Spock Mock()

关于grails - Grails 2.2.3和Spock 0.7的类广播异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17382656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com