我们习惯覆盖toString方法,这样我们只需调用
即可获取字段值println“对象详细信息 - > $ object”
我们考虑为我们的构建编写测试用例作为一种良好实践并遵循TDD。
我的测试用例因一些数据缺失而失败。测试用例如下所示:
y = yCentre + sin(x * radScalingFactor) * heightScalingFactor
以下是我的课程:
void "test method:toString"() {
given:
CSV csv = new CSV(accountId: '1', accountName: 'testName')
when:
String exp = "[accountId=" + csv.accountId + ", groupId)" + csv.groupId + ", accountName=" + csv.accountName +"]"
String string = csv.toString()
then:
string == exp
}
测试用例突然失败。然后我小心翼翼地看了一下,尝试在换行符末尾附加'+'而不是在行开头。
测试用例正常工作。
任何人都可以告诉我这是一个错误还是groovy只是接受了上述两种情况,但在行尾附加'+'的情况是唯一正确的方法。
对我而言,使用'+'连接的正确方法似乎是
public class CSV {
String accountId
String groupId
String accountName
String chargeMode
String invoiceId
String date
@Override
public String toString() {
return "ChargingCsvLine [accountId="
+ accountId + ", groupId)" + groupId + ", accountName="+
accountName + " "]"
}
}
而不是
"abc"+
"def"
但是为什么groovy在这种情况下默默地破坏并且没有抛出任何错误。至少应抛出操作员级异常。
谢谢!
答案 0 :(得分:8)
Groovy占用你的第一行(没有结尾+
)并使用这个return语句并且不执行任何进一步的代码。
String add1() {
return "1"
+ "2" // never gets executed
}
assert add1()=="1"
如果没有return
它会给你一个运行时错误:
String add1() {
"1" // one statement
+ "2" // another statement - this is the implicit return
}
assert add1()=="12"
这失败了:
Caught: groovy.lang.MissingMethodException: No signature of method: java.lang.String.positive() is applicable for argument types: () values: []
Possible solutions: notify(), tokenize(), size(), size()
groovy.lang.MissingMethodException: No signature of method: java.lang.String.positive() is applicable for argument types: () values: []
Possible solutions: notify(), tokenize(), size(), size()
at tos.add1(tos.groovy:3)
at tos$add1.callCurrent(Unknown Source)
at tos.run(tos.groovy:6)
shell returned 1
这里的原因是,groovy看到两行,并且字符串不会覆盖positive
运算符。
如果使用静态编译,它也无法编译:
@groovy.transform.CompileStatic
String add1() {
return "1"
+ "2"
}
assert add1()=="1"
收率:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
test.groovy: 4: [Static type checking] - Cannot find matching method java.lang.String#positive(). Please check if the declared type is right and if the method exists.
@ line 4, column 2.
+ "2"
^
1 error
外卖:
toString
@ToString
+
一起敲击字符串。答案 1 :(得分:1)
您可以在groovy中为多行命令使用三重单引号。
http://www.groovy-lang.org/syntax.html#_string_concatenation
Triple single quoted strings are multiline. You can span the content of
the string across line boundaries without the need to split the string
in several pieces, without contatenation or newline escape characters:
def aMultilineString = '''line one
line two
line three'''