编译以下代码段时:
class MyTest {
@org.junit.Test
def `test test`() {
}
}
方法test test
将字节码设置为test$u0020test
。
为什么会发生这种情况,如何禁用?
根据JVM规范,空间是方法名称的有效标识符。此外,在Scala语言规范中没有提到这种编码。此外,其他JVM语言(如Groovy和基于Groovy的Spock Framework)不对空间进行编码。
为什么我需要这个:人性化的JUnit测试名称和测试报告。
Java 1.8.0_45,Scala 2.11.6
答案 0 :(得分:3)
否则将无法从Java调用。与Java的互操作性是Scala设计中的一个重要考虑因素。
OTOH,经验表明,在这种情况下,最好坚持使用Java名称。
答案 1 :(得分:2)
查看https://github.com/sbt/junit-interface
-s尝试解码堆栈跟踪和测试名称中的Scala名称。如果类路径上没有匹配的Scala库,则静默回退到未解码的名称。
所以我们可以说
testOptions += Tests.Argument(TestFrameworks.JUnit, "-q", "-v", "-s")
在build.sbt
文件中,然后是方法
def `get one hundred if fifty plus fifty started` {}
测试结果显示
[info] Test ScalaTest.get one hundred if fifty plus fifty started
不
[info] Test ScalaTest.get$u0020one$u0020hundred$u0020if$u0020fifty$u0020plus$u0020fifty started