Groovy默认方法参数
问题描述:
如何调用下面的方法def只传递interactionId,transactionId,awResponseFile,testMethodName和expectedNumberOfConsumers?Groovy默认方法参数
方法高清
void verifyPersistence(String interactionId, String transactionId,
File rawResponseFile, String testMethodName,
int expectedNumberOfDatasourceProductResponseRaws=1,
String dsProductName=datasourceSpec['creditreport.name'],
int expectedNumberOfDatasourceProductResponses=1,
int expectedNumberOfConsumers=1,
int expectedNumberOfAddresses=1)
方法调用
verifyPersistence interactionId.persistedVersion(), transactionId,
results, testName.methodName, expectedNumberOfConsumers:8
异常
groovy.lang.MissingMethodException: No signature of method: verifyPersistence() is applicable for argument types: (java.util.LinkedHashMap, java.lang.String, java.lang.String, java.io.File, java.lang.String) values: [[expectedNumberOfConsumers:8], 3130001030065, 10003000000890059, C:\results, multiple consumers contracts]
Possible solutions:
verifyPersistence(java.lang.String, java.lang.String, java.io.File, java.lang.String),
verifyPersistence(java.lang.String, java.lang.String, java.io.File, java.lang.String, int),
verifyPersistence(java.lang.String, java.lang.String, java.io.File, java.lang.String, int, java.lang.String),
verifyPersistence(java.lang.String, java.lang.String, java.io.File, java.lang.String, int, java.lang.String, int), verifyPersistence(java.lang.String, java.lang.String, java.io.File, java.lang.String, int, java.lang.String, int, int)
at HitmultipleconsumersPersistSpec.groovy:151)
答
当你inclu如果地图条目(key:value
),它们会自动收集,放入散列表并作为第一个参数传递。 Groovy现在没有命名参数。对于具体的情况,我想你最好使用地图为这个方法:
def verifyPersistence(Map map) {
String interactionId = map.interactionId
String transactionId = map.transactionId
File rawResponseFile = map.rawResponseFile
String testMethodName = map.testMethodName
int expectedNumberOfDatasourceProductResponseRaws = map.expectedNumberOfDatasourceProductResponseRaws ?: 1
String dsProductName = map.dsProductName ?: datasourceSpec['creditreport.name']
int expectedNumberOfDatasourceProductResponses = map.expectedNumberOfDatasourceProductResponses ?: 1
int expectedNumberOfConsumers = map.expectedNumberOfConsumers ?: 1
int expectedNumberOfAddresses = map.expectedNumberOfAddresses ?: 1
}
verifyPersistence(
interactionId : interactionId.persistedVersion(),
transactionId : transactionId,
rawResponseFile : results,
expectedNumberOfDatasourceProductResponseRaws : 14,
expectedNumberOfConsumers:8
)
你显然并不需要每一个参数赋值给一个变量,你可以简单地使用map.field
语法。如果你希望它被类型检查,那么我认为你最好使用一个对象来封装参数。
是不可能将其他参数作为'null'传递? – iberbeu 2013-03-07 20:41:21
@iberbeu no。其他人仍应采用def方法中提供的默认值。你知道我做错了什么吗? – 2013-03-07 20:42:19
它看起来像第一个参数应该是'String',但是你引入了'LinkedHashMap''你确定'interactionId.persistedVersion()'返回一个String而不是'LinkedHashMap' – iberbeu 2013-03-07 20:46:55