2011-03-10 99 views
0

我想我的自动化插件的单元测试此处描述通过方法Eclipse RCP应用程序:http://www.eclipse.org/articles/article.php?file=Article-PDEJUnitAntAutomation/index.html注意,我正在运行Eclipse 3.6自动化Eclipse插件单元测试

然而,我“M相处的线路编译错误:

package org.eclipse.jdt.internal.junit.model does not exist 
[javac] import org.eclipse.jdt.internal.junit.model.ITestRunListener2; 

cannot find symbol 
[javac] symbol: class ITestRunListener2 
[javac] public class PDETestListener implements ITestRunListener2 { 
[javac]          ^

现在看来似乎有事情做以下警告显示在Eclipse:

气馁访问:类型ITestRunListener2是无法访问的,由于所需库C的限制:\日食\插件\ org.eclipse.jdt.junit.core_3.6.1.r361_v20100825-0800.jar

什么这是否意味着准确,我该如何解决?

仅供参考,这里是(从上面的链接中找到的示例代码所)对我试图编译其中一个类代码:

在此先感谢。


package pde.test.utils; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 

import junit.framework.AssertionFailedError; 
import junit.framework.TestCase; 
import junit.framework.TestResult; 

import org.apache.tools.ant.taskdefs.optional.junit.JUnitTest; 
import org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter; 
import org.eclipse.jdt.internal.junit.model.ITestRunListener2; 

public class PDETestListener implements ITestRunListener2 { 
    private Object resultsCollector; 
    private int totalNumberOfTests; 
    private int testsRunCount; 
    private int numberOfTestsPassed; 
    private int numberOfTestsFailed; 
    private int numberOfTestsWithError; 
    private boolean testRunEnded = false; 
    private XMLJUnitResultFormatter xmlResultsFormatter; 
    private File outputFile; 
    private String suiteName; 
    private JUnitTest junitTestSuite; 
    private TestCase currentTest; 

    public PDETestListener(Object collector, String suite) { 
     resultsCollector = collector; 
     suiteName = suite; 
     junitTestSuite = new JUnitTest(suiteName); 
     junitTestSuite.setProperties(System.getProperties()); 
    } 

    public void setOutputFile(String filename) { 
     outputFile = new File(filename); 
    } 

    public File getOutputFile() { 
     if (outputFile == null) { 
      setOutputFile("TEST-" + suiteName + ".xml"); 
     } 
     return outputFile; 
    } 

    public boolean failed() { 
     return ((numberOfTestsFailed + numberOfTestsWithError) > 0) || (testRunEnded && (testsRunCount == 0)); 
    } 

    public int count() { 
     return testsRunCount; 
    } 

    private XMLJUnitResultFormatter getXMLJUnitResultFormatter() { 
     if (xmlResultsFormatter == null) { 
      xmlResultsFormatter = new XMLJUnitResultFormatter(); 
      try { 
       xmlResultsFormatter.setOutput(new FileOutputStream(getOutputFile())); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
     } 
     return xmlResultsFormatter; 
    } 

    public synchronized void testRunStarted(int testCount) { 
     totalNumberOfTests = testCount; 
     testsRunCount = 0; 
     numberOfTestsPassed = 0; 
     numberOfTestsFailed = 0; 
     numberOfTestsWithError = 0; 
     testRunEnded = false; 
     getXMLJUnitResultFormatter().startTestSuite(junitTestSuite); 
     System.out.println("PDE Test Run Started - running " + totalNumberOfTests + " tests ..."); 
    } 

    public synchronized void testRunEnded(long elapsedTime) { 
     testRunEnded = true; 
     junitTestSuite.setCounts(testsRunCount, numberOfTestsFailed, numberOfTestsWithError); 
     junitTestSuite.setRunTime(elapsedTime); 
     getXMLJUnitResultFormatter().endTestSuite(junitTestSuite); 
     System.out.println("Test Run Ended - " + (failed() ? "FAILED" : "PASSED") + " - Total: " + totalNumberOfTests 
       + " (Errors: " + numberOfTestsWithError 
       + ", Failed: " + numberOfTestsFailed 
       + ", Passed: " + numberOfTestsPassed + "), duration " + elapsedTime + "ms."); 

     synchronized (resultsCollector) { 
      resultsCollector.notifyAll(); 
     } 
    } 

    public synchronized void testRunStopped(long elapsedTime) { 
     System.out.println("Test Run Stopped"); 
     testRunEnded(elapsedTime); 
    } 

    public synchronized void testRunTerminated() { 
     System.out.println("Test Run Terminated"); 
     testRunEnded(0); 
    } 

    public synchronized void testStarted(String testId, String testName) { 
     testsRunCount++; 
     currentTest = new WrapperTestCase(testName); 
     getXMLJUnitResultFormatter().startTest(currentTest); 
     System.out.println(" Test Started - " + count() + " - " + testName); 
    } 

    public synchronized void testEnded(String testId, String testName) { 
     numberOfTestsPassed = count() - (numberOfTestsFailed + numberOfTestsWithError); 
     getXMLJUnitResultFormatter().endTest(currentTest); 
     System.out.println(" Test Ended - " + count() + " - " + testName); 
    } 

    public synchronized void testFailed(int status, String testId, String testName, String trace, String expected, String actual) { 
     String statusMessage = String.valueOf(status); 
     if (status == ITestRunListener2.STATUS_OK) { 
      numberOfTestsPassed++; 
      statusMessage = "OK"; 
     } else if (status == ITestRunListener2.STATUS_FAILURE) { 
      numberOfTestsFailed++; 
      statusMessage = "FAILED"; 
      getXMLJUnitResultFormatter().addFailure(currentTest, new AssertionFailedError(trace)); 
     } else if (status == ITestRunListener2.STATUS_ERROR) { 
      numberOfTestsWithError++; 
      statusMessage = "ERROR"; 
      getXMLJUnitResultFormatter().addError(currentTest, new Exception(trace)); 
     } 
     System.out.println(" Test Failed - " + count() + " - " + testName + " - status: " + statusMessage 
       + ", trace: " + trace + ", expected: " + expected + ", actual: " + actual); 
    } 

    public synchronized void testReran(String testId, String testClass, String testName, int status, String trace, String expected, String actual) { 
     String statusMessage = String.valueOf(status); 
     if (status == ITestRunListener2.STATUS_OK) { 
      statusMessage = "OK"; 
     } else if (status == ITestRunListener2.STATUS_FAILURE) { 
      statusMessage = "FAILED"; 
     } else if (status == ITestRunListener2.STATUS_ERROR) { 
      statusMessage = "ERROR"; 
     } 

     System.out.println(" Test ReRan - " + testName + " - test class: " + testClass + ", status: " + statusMessage 
       + ", trace: " + trace + ", expected: " + expected + ", actual: " + actual); 
    } 

    public synchronized void testTreeEntry(String description) { 
     System.out.println("Test Tree Entry - Description: " + description); 
    } 

    class WrapperTestCase extends TestCase { 

     public WrapperTestCase(String name) { 
      super(name); 
     } 

     public int countTestCases() { 
      return 1; 
     } 

     public void run(TestResult result) { 
     } 
    } 
} 

回答

1

问题是提供ITestRunListener2接口的插件没有导出相应的包。对于解决方案,您可能需要查看文章中链接的相应bug 140503中提供的修补程序,该修补程序包含一个标题为PDETestListener/Collector for 3.5 + 3.6的附件。这可能是您运行测试用例所需的。

PS:我不确定这是否是一个好主意,但我相信,对于测试(和构建)自动化来说,使用Buckminster或Maven/Tycho是个好主意。这两个都是Eclipse项目,并提供了一个处理测试自动化的好方法 - 我喜欢它们都比使用Ant脚本更好。

+0

不幸的是,我仍然得到与附件相同的错误。 – lucks 2011-03-10 23:47:31

+0

对不起,它没有帮助。 – 2011-03-11 09:24:27

+0

在添加缺少的依赖项(org.eclipse.core.runtime)之后,我能够在Eclipse中构建并运行它...但是,为了自动化目的,我仍然需要能够在Eclipse之外构建/运行:/ – lucks 2011-03-11 17:11:48

0

我不得不添加一些依赖以使该方法适用于Eclipse Juno(4.4)。

这3个是我为了解决ITestRunListener2,ISafeRunnableISchedulingRule而添加的,以及OP推荐的那个。

  • org.eclipse.jdt.junit.core_*.jar
  • org.eclipse.equinox.common_*.jar
  • org.eclipse.core.jobs_*.jar
  • org.eclipse.core.runtime_*.jar