我们习惯于重写toString方法,这样我们就可以通过调用来获取字段值
println"对象详细信息 - > $ object"
我们考虑为我们的构建编写测试用例作为一种良好实践并遵循TDD.
我的测试用例因一些数据缺失而失败.测试用例如下所示:
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 }
以下是我的课程:
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 + " "]" } }
测试用例突然失败.然后我仔细看了一下,尝试在换行符末尾附加'+',而不是在行开头.
测试用例正常工作.
任何人都可以告诉我,这是一个错误或groovy只是接受了上述两种情况,但在行尾附加'+'的情况是唯一正确的方法.
对我来说似乎使用'+'连接的正确方法是
"abc"+ "def"
并不是
"abc" +"def"
但是为什么groovy在这种情况下默默地破坏并且没有抛出任何错误.至少应抛出操作员级异常.
谢谢!
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
小贴士:
groovy与java有区别
在groovy中toString
时,不要在IDE中生成@ToString
+
当有GStrings的时候,不要在groovy中一起敲打字符串.