簡體   English   中英

Groovy默認方法參數

[英]Groovy default method parameters

如何調用下面的方法def只傳遞interactionId,transactionId,awResponseFile,testMethodName和expectedNumberOfConsumers

方法定義

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)

當您包含映射條目( 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語法即可。 如果您希望對其進行類型檢查,那么我認為您最好使用對象來封裝參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM