2017-03-26 13 views
-1
import groovy.util.slurpersupport.Node 
import groovy.util.slurpersupport.NodeChild 

/** 
* Created by on 2017-03-25. 
*/ 


File file = new File("/Users/zaid/output/1") 
XMLLoader xmlLoader = new XMLLoader(file); 
HashMap<String, XmlSlurper> temp = xmlLoader.sendNodes() 
JunitDataParser junitParser = new JunitDataParser(temp) 
junitParser.populateStats() 

public class XMLLoader { 
    HashMap<String, XmlSlurper> rootNodes; // Collection of root nodes for Junit xml files 

    public XMLLoader(File junitFile) { 
     rootNodes = new ArrayList<>() 
     // If file is directory then closure will search directory to find valid xml files 
     if (junitFile.isDirectory()) { 
      junitFile.eachFile { 
       if (validateFile(it)) { 
        rootNodes.put(it.name, new XmlSlurper().parse(it)) // Load each fine into arraylist of XMLSlurpers 
       } 
      } 
     } else { 
      if (validateFile(junitFile)) { 
       rootNodes.put(junitFile.name, new XmlSlurper().parse(it)) 
       // Load single fine into arraylist of XMLSlurpers 
      } 
     } 
    } 

    boolean validateFile(File checkFile) { 
     if (checkFile.name.endsWith('.xml')) { 
      assert checkFile.exists(): "The file entered could not be be read" 
      assert checkFile.canRead(): "The file entered could not be be read" 
      return true; 
     } 
     return false 
    } 

    HashMap<String, XmlSlurper> sendNodes() { 
     return rootNodes 
    } 
} 


public class JunitDataParser extends GeneralDataParser { 


    def JunitDataParser(HashMap<String, XmlSlurper> rootNodes) { 
     super(rootNodes) 
    } 

    HashMap<String, ArrayList<TestSuites>> getPopulatedData() { 
     return super.getPopulatedData() 
    } 

    void populateStats() { 
     ArrayList<TestSuite> stats = getTestSuites(); 
    } 

    ArrayList<TestSuite> getTestSuites() { 
     ArrayList<TestSuite> testSuites = new ArrayList<>() 
     rootNodes.get("first.xml").'**'.findAll { 
      (it.name().equals("testsuite")) && (it.children().getAt(0).name().equals("testcase")) 
     }.each { 
      TestSuite temp = new TestSuite(it.attributes().get("name"), it.attributes().get("tests").toInteger(), it.attributes().get("errors").toInteger(), it.attributes().get("time"), it.attributes().get("timestamp"), getTestCases(it)) 
      testSuites.add(temp) 
     } 
     return testSuites 
    } 

    ArrayList<TestCase> getTestCases(NodeChild testSuiteNode) { 
     ArrayList<TestCase> testCases = new ArrayList<>() 
     testSuiteNode.childNodes().each { 
      String time; 
      if (time!=null && time.length()>0) { 
       time = it.attributes().get("time") 
      } else { 
       time = "Time Not Found" 
      } 
      testCases.add(new TestCase(it.attributes().get("name"), getOutCome(it), time)) 
     } 
     return testCases 
    } 

    TestResult getOutCome(Node testCaseNode) { 
     String testMessage = "hi" 
     int testOutcome = 0; 
     if (testCaseNode.childNodes().size() != 0) { 
      testCaseNode.childNodes().each { 
       it.attributes().each { 
        testMessage = testMessage + "\n $it.key : $it.value" 
       } 
      } 
      testOutcome =1 
     } 
     TestResult temp = new TestResult(0,testMessage) 
     return temp 
    } 

} 

// The Base abstract class that all additional parsers should extend and populate 
public abstract class GeneralDataParser { 
    HashMap<String, XmlSlurper> rootNodes 
    HashMap<String, ArrayList<TestSuites>> populatedData 

    public GeneralDataParser(HashMap<String, XmlSlurper> rootNodes) { 
     this.rootNodes = rootNodes 
    } 

    abstract void populateStats() 

    abstract ArrayList<TestSuite> getTestSuites() 

    abstract ArrayList<TestCase> getTestCases(NodeChild testSuiteNodes) 

    abstract TestResult getOutCome(Node testCaseNode) 

} 

public class TestSuites { 
    ArrayList<TestSuite> testSuites 

    TestSuites(ArrayList<TestSuite> testSuites) { 
     this.testSuites = testSuites 
    } 
} 

public class TestSuite { 
    String testSuiteName 
    int numOfTests 
    int numOfErrors 
    int numOfFailures 
    String timeTaken; 
    String timeStamp; 
    ArrayList<TestCase> testCases 

    TestSuite(String testSuiteName, int numOfTests, int numOfErrors, int numOfFailures, String timeTaken, String timeStamp, ArrayList<TestCase> testCases) { 
     this.testSuiteName = testSuiteName 
     this.numOfTests = numOfTests 
     this.numOfErrors = numOfErrors 
     this.numOfFailures = numOfFailures 
     this.timeTaken = timeTaken 
     this.timeStamp = timeStamp 
     this.testCases = testCases 
    } 
} 

public class TestCase { 
    String testCasename 
    TestResult testOutcome 
    String testCaseTime = "" 

    TestCase(String testCasename, TestResult testOutcome, String testCaseTime) { 
     this.testCasename = testCasename 
     this.testOutcome = testOutcome 
     this.testCaseTime = testCaseTime 
    } 
} 

public class TestResult { 
    int valOfResult 
    String textOfResult 

    TestResult(int valOfResult, String textOfResult) { 
     this.valOfResult = valOfResult 
     this.textOfResult = textOfResult 
    } 
} 

一致するコンストラクタを取得し続けると誰も問題を見ることができないのですか?でも一致するコンストラクタが見つからない場合

キャッチ:groovy.lang.GroovyRuntimeExceptionは:TestSuiteが(java.lang.Stringで、java.lang.Integerの、java.lang.Integerの、java.lang.Stringで、java.langの:のためのマッチングコンストラクタが見つかりませんでした.String、java.util.ArrayList) groovy.lang.GroovyRuntimeException:一致するコンストラクタが見つかりませんでした:TestSuite(java.lang.String、java.lang.Integer、java.lang.Integer、java.lang.String、java JunitDataParser.populateStats(JunitXMLToBeautifulHTML.groovyで67) :70)JunitDataParser.getTestSuites(JunitXMLToBeautifulHTML.groovyで :JunitDataParser $ _getTestSuites_closure2.doCall(JunitXMLToBeautifulHTML.groovyで.lang.String、java.util.ArrayListの) 62) JunitDataParserで$ populateS JunitXMLToBeautifulHTML.run(JunitXMLToBeautifulHTML.groovy:13)でtats.call(不明なソース) com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)で

答えて

0

エラーメッセージ正しい。

TestSuite(String testSuiteName, int numOfTests, int numOfErrors, int numOfFailures, String timeTaken, String timeStamp, ArrayList<TestCase> testCases) 

そして、あなたが使用しようとしている:

コンストラクタの署名がある

new TestSuite(it.attributes().get("name"), it.attributes().get("tests").toInteger(), it.attributes().get("errors").toInteger(), it.attributes().get("time"), it.attributes().get("timestamp"), getTestCases(it)) 

ですから、numOfFailuresを渡していません。

+0

ありがとうございます、時には二番目の目は必要なだけです。 それはうまくいった! –

+0

私はライン上の内部クラス 'TestResultの一時=新しいTestResult(0、testMessage)' として抽象クラスにテストスイート、テストケースとTestResultを移動した場合、それはその >キャッチ文句:groovy.lang.GroovyRuntimeExceptionを:でしたGroovy.lang.GroovyRuntimeException:GeneralDataParser $ TestResult(java.lang.Integer、java.lang.String)の一致するコンストラクタが見つかりませんでした。文字列)--------どんな考え? @doelleri –

関連する問題