- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在我的 Grails Spock 测试中实现 Groovy 的新特征?每次我尝试时,我都会得到如下所示的堆栈跟踪。 Groovy 路径是否存在一些我可能不知道的限制?
JDK版本:
java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
Groovy 版本:
Groovy Version: 2.3.6 JVM: 1.7.0_65 Vendor: Oracle Corporation OS: Linux
Grails 版本:
Grails version: 2.4.3
简化代码:
import grails.test.mixin.Mock
@Mock([AnalyticFilters])
trait ControllerTestBase {
public void setupCommonStuff(boolean setupIdCall = false) {
params.devId = TEST_DEV_ID
// mocking version filter
params.version = "v${TEST_VERSION}"
defineBeans{
CacheService(cacheServiceMock: "createMock")
}
CommonParams.parseParams(params)
cacheMock = applicationContext.getBean("cacheServiceMock")
if(setupStoreIdCall) {
cacheMock.demandExplicit.makeCompositeKey(0..20) { List<String> list ->
def (String uuid, String orgUuid) = list
return "foobar"
}
}
}
}
@TestFor(AuditController)
public class AuditControllerSpecs extends Specification implements ControllerTestBase {
private def auditServiceFactory
public String testAuditData = "{audit:'whatever'}"
public void setup() {
setupCommonParams()
defineBeans {
auditServiceFactory(GrailsMock, AuditService)
auditService(auditServiceFactory: "createMock")
}
auditServiceFactory = applicationContext.getBean("auditServiceFactory")
auditServiceFactory.demand.writeEventToMongo { BasicDBObject data -> }
controller.auditService = applicationContext.getBean('auditService', AuditService)
}
def "calling productAudit should return with 200 and OK"() {
given:
request.JSON = JSON.parse(testAuditData)
request.method = 'POST'
when:
withFilters(action: "productAudit") {
controller.productAudit()
}
then:
def res = JSON.parse(response.text)
expect:
response.status == 200
res.message == "OK"
100 == 2
}
}
堆栈跟踪:
[groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
[groovyc] General error during canonicalization: Comparison method violates its general contract!
[groovyc]
[groovyc] java.lang.IllegalArgumentException: Comparison method violates its general contract!
[groovyc] at java.util.TimSort.mergeLo(TimSort.java:747)
[groovyc] at java.util.TimSort.mergeAt(TimSort.java:483)
[groovyc] at java.util.TimSort.mergeCollapse(TimSort.java:410)
[groovyc] at java.util.TimSort.sort(TimSort.java:214)
[groovyc] at java.util.TimSort.sort(TimSort.java:173)
[groovyc] at java.util.Arrays.sort(Arrays.java:659)
[groovyc] at java.util.Collections.sort(Collections.java:217)
[groovyc] at org.codehaus.groovy.transform.trait.TraitComposer.applyTrait(TraitComposer.java:183)
[groovyc] at org.codehaus.groovy.transform.trait.TraitComposer.doExtendTraits(TraitComposer.java:105)
[groovyc] at org.codehaus.groovy.control.CompilationUnit$4.call(CompilationUnit.java:188)
[groovyc] at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1047)
[groovyc] at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:583)
[groovyc] at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:561)
[groovyc] at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:538)
[groovyc] at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:517)
[groovyc] at org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:59)
[groovyc] at org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:215)
[groovyc] at org.codehaus.groovy.ant.Groovyc.runCompiler(Groovyc.java:1104)
[groovyc] at org.codehaus.groovy.ant.Groovyc.compile(Groovyc.java:1155)
[groovyc] at org.codehaus.groovy.grails.compiler.Grailsc.compile(Grailsc.java:78)
[groovyc] at org.codehaus.groovy.ant.Groovyc.execute(Groovyc.java:770)
[groovyc] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
[groovyc] at sun.reflect.GeneratedMethodAccessor51.invoke(Unknown Source)
[groovyc] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[groovyc] at java.lang.reflect.Method.invoke(Method.java:606)
[groovyc] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[groovyc] at groovy.util.AntBuilder.performTask(AntBuilder.java:319)
[groovyc] at groovy.util.AntBuilder.nodeCompleted(AntBuilder.java:264)
[groovyc] at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:147)
[groovyc] at groovy.util.AntBuilder.doInvokeMethod(AntBuilder.java:203)
[groovyc] at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:64)
最佳答案
同样的异常发生在我们大量使用特征的项目中:
java.lang.IllegalArgumentException:比较方法违反了其一般契约!
我的同事发现,只要特征具有超过 10 个字段,就会发生这种情况。我们不知道这种行为的起源。
作为一种解决方法,我们利用特征继承:
trait Foo extends MoreFoo {
//this has 10 fields
}
trait MoreFoo{
//this has some more fields but not more than 10
}
值得注意的是,我们在 Android 上使用 Groovy,因此按照 ColimMc 的建议调整 JVM 选项不是一个选项。
关于grails - 在 Grails 中使用 Groovy Trait 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27259633/
我正在尝试在具有相同特征的盒装特征对象上实现特征。我以前对其方法采用的特征做过这样的事情&Self,它工作得很好,但不是Self。。我意识到在这个特定的例子中,我可以将fn get_*()函数更改为返
在编写带有特征的代码时,您可以将特征放在特征边界中: use std::fmt::Debug; fn myfunction1(v: Box) { println!("{:?}", v); }
我有一个特征正在使用另一个特征,现在我收到关于类中不存在的函数的错误。我简化了代码: 设置.php: getMessage());} } } ?> 数据库.php pdo=new PDO("m
这个问题在这里已经有了答案: Why doesn't Rust support trait object upcasting? (4 个回答) 2年前关闭。 如果我有 Box , 我可以返回 &dyn
给定这段代码: trait Trait {} struct Child; impl Trait for Child {} struct Father { child: &'a Box, } i
这个问题的标题与许多相关问题非常相似,但我还没有找到一个讨论这个特定问题的问题。 我有一个 Color非常简单定义的类型,如下所示: pub struct Color { red: u8,
我有三个特点。 Trait Param、GroupId 和 SessionId。特征 GroupId 和 SessionId 包括 Param。 类 GroupSession 包括特征 GroupId
查看 Traversable 和 TraversableLike 的 scaladoc,我很难弄清楚它们之间的区别是什么(除了一个扩展另一个)。文档中唯一明显的区别是它说 Traversable 是一
我有以下代码: trait T { type AT; fn foo(&self); } struct AbstractT { t: Box>, } impl T for Abs
如何在 Rust 中尝试类似以下的操作? builder 类是一个 trait 对象,它返回另一个 trait 对象(类型删除),其中选择的实现由我们正在使用的 builder trait 的特定对象
我想创建一个新向量,其中包含实现 Trait 的对象,来 self 已有的包含这些对象的一些向量。 trait Foo { // } struct Bar { i: i32, } st
到目前为止,在我的项目中,我使用了许多特征来允许在单元测试中模拟/ stub 以注入(inject)依赖项。然而,到目前为止我正在做的事情的一个细节似乎非常可疑,以至于我很惊讶它甚至可以编译。我担心正
假设我有一些特质: trait MyTrait { fn function1(&self); } 和一些实现它的类型: struct MyStruct { number: i32, }
更新:不止我一个人在思考这个问题,看来这确实是一个错误。参见 here .修复的那一天将是美好的一天! :) 这开始为 I love PHP traits! I'm going to use them
以下特征Parser[+T]是扩展接受 Input 的函数的特征并返回 Result[T] . trait Parser[+T] extends (Input => Result[T]) 那是对的吗
我有一个类型,我可以通过它访问它的方法 SomeTrait::::method() 但我不明白那和之间的区别 >::method() 在 C++ 中,我希望这样: SomeTrait::method(
在下面的代码中,不可能从对实现相同特征的动态大小类型的引用中获得对特征对象的引用。为什么会这样呢?如果我可以同时调用trait方法,那么&dyn Trait和&(?Sized + Trait)之间到底
我是 Rust 的新手,我想通过实现一些小项目来学习这门语言并更好地理解。我的第一次尝试是解析从 MQTT 代理收到的 JSON 数据。 我很高兴在 tornado 的帮助下轻松完成这项工作。和 se
在下面的代码中,不可能从对实现相同特征的动态大小类型的引用中获得对特征对象的引用。为什么会这样呢?如果我可以同时调用trait方法,那么&dyn Trait和&(?Sized + Trait)之间到底
这个问题在这里已经有了答案: Why is the `Sized` bound necessary in this trait? (2 个回答) 1年前关闭。 我有一个特质 Vertex我想要几个结构
我是一名优秀的程序员,十分优秀!