Skip to main content
Jump to: navigation, search

Difference between revisions of "DSDP/TM/JUnittests Framework Documentation"

< DSDP‎ | TM
(Where to put a new test suite or test case?)
Line 52: Line 52:
  
 
=== Where to put a new test suite or test case? ===
 
=== Where to put a new test suite or test case? ===
 +
 +
* If you write test suites and test cases to test RSE components or parts, add the test suites and test cases to the ''org.eclipse.rse.tests'' plug-in.
 +
* If you write test suites and test cases for your own implementation based on RSE and the RSE tests framework, create your own tests plug-in which depends on RSE and RSE tests framework plug-ins.
 +
* If you want to add a new test case, always check if you can extend an existing test suite before creating a new one.
 +
* If you have a set of test cases, probably linked to an specific RSE component or part, create a new test suite if there is not already one for the same RSE component or part.
 +
* If creating a new test suite
 +
** Follow the package naming scheme of the existing test suites and test cases.
 +
** Each package must start with the prefix ''org.eclipse.rse.tests''.
 +
** Place interfaces and implementations designated for use only in specific test case(s) in ''internal'' packages.
 +
** '''Always''' use the following template to create your own test suite and '''change only''' the ''&lt;YOUR ...&gt;'' markers!
 +
 +
  <code>
 +
  ''&lt;YOUR COPYRIGHT HEADER&gt;''
 +
  package ''&lt;YOUR PACKAGE DECLARATION&gt;'';
 +
 +
  import junit.framework.Test;
 +
  import junit.framework.TestSuite;
 +
 +
  import org.eclipse.rse.tests.framework.DelegatingTestSuiteHolder;
 +
 +
  ''&lt;YOUR TEST SUITE COMMENT HEADER&gt;''
 +
  public class ''&lt;YOUR TEST SUITE NAME&gt;'' extends DelegatingTestSuiteHolder {
 +
 +
/**
 +
* Standard Java application main method. Allows to launch the test
 +
* suite from outside as part of nightly runs, headless runs or other.
 +
* <p><b>Note:</b> Use only <code>junit.textui.TestRunner</code> here as
 +
* it is explicitly supposed to output the test output to the shell the
 +
* test suite has been launched from.
 +
* <p>
 +
* @param args The standard Java application command line parameters passed in.
 +
*/
 +
public static void main(String[] args) {
 +
junit.textui.TestRunner.run(suite());
 +
}
 +
 +
/**
 +
* Combine all test into a suite and returns the test suite instance.
 +
* <p>
 +
* <b>Note: This method must be always called <i><code>suite</code></i> ! Otherwise
 +
* the JUnit plug-in test launcher will fail to detect this class!</b>
 +
* <p>
 +
* @return The test suite instance.
 +
*/
 +
public static Test suite() {
 +
TestSuite suite = new TestSuite("''&lt;YOUR TEST SUITE HUMAN READABLE NAME&gt;''"); //$NON-NLS-1$
 +
// add the single test suites to the overall one here.
 +
suite.addTestSuite(''&lt;YOUR TEST CASE IMPLEMENTATION CLASS NAME&gt;''.class);
 +
 +
return suite;
 +
}
 +
 +
/* (non-Javadoc)
 +
* @see org.eclipse.rse.tests.framework.AbstractTestSuiteHolder#getTestSuite()
 +
*/
 +
public TestSuite getTestSuite() {
 +
return (TestSuite)RSEConnectionTestSuite.suite();
 +
}
 +
}
 +
  </code>
  
 
=== Which base class should a test case inherit from? ===
 
=== Which base class should a test case inherit from? ===

Revision as of 14:11, 30 December 2006

Hitch-Hacker's Guide to Using and Writing DSDP-TM (aka RSE) JUnit tests

This page is giving a introduction to the usage of the DSDP-TM JUnit tests framework as well as providing How To's and short descriptions of the features available in the framework for JUnit test developers.

Note: The page is under on-going maintenance and will be updated if the framework is changed or extended!

Using the DSDP-TM JUnit tests

Using means running the test cases either within a target platform Eclipse or within the currently executing Eclipse instance. There is basically only one question to distiguish between the two use cases:

Do you only use RSE within your currently running Eclipse environment for remote system connectivity or do you develop plugin(s) based on RSE and/or using RSE API?

  • If you answer I develop plugin(s) using RSE API and/or I contribute/plan to contribute actively to RSE. -> see section 2.1
  • If you answer I only use RSE within my running Eclipse for accessing remote systems. -> see section 2.2
  • If you cannot answer the above question clearly (because you may simple fall in both user groups at the same time), you may choose the use case with can serve your needs most efficiently.

Launching the DSDP-TM JUnit tests as JUnit Plug-in Test

Precondition: Both JDT and PDE needs to be installed and activated.

  1. Open the Eclipse Launch Configuration Dialog in Run mode (Run -> Run...).
  2. Expand the "JUnit Plug-in test" category if not expanded anyway.
  3. Select the pre-configured launch configuration named "RSE Combined Test Suite".
  4. Choose "Duplicate" either from the context menu or from the tree toolbar.
  5. Change the launch configuration name of the duplicate to identify your test suites launch configuration.
  6. If your test suite is in another project than "org.eclipse.rse.tests", click now on the "Browse..." right after the "Project" entry field and select the project which contains your test suite.
  7. Click on the "Select..." button right after the "Test class" and choose your test suite or test case to run.
  8. Switch to the "Main" tab and check all settings to be as you want them. Usely you can leave them with their defaults.
  9. Switch to the "Arguments" tab and check all settings to be as you want them. Usely you can leave them with their defaults.
  10. Switch to the "Environment" tab if you require to set a specific environment to enable your test suite to run.
  11. Switch to the "Common" tab and change the "Save as" setting to "Local file".
  12. Click on the "Run" button to execute the launch configuration.

The JUnit view will open, near to the Problems view, to show the progress, successes and failures in executing the single test cases. Inspect the failures within the failure trace part for analysing why a test case might have failed. You have real great navigation possibilities and comparisation support from there.

In case that the JUnit view is not opened automatically, you can open the view via Window -> Show View -> Other ... -> Java -> JUnit.

Launching the DSDP-TM JUnit tests from within the currently running Eclipse instance

Precondition: The plugin org.eclipse.rse.tests.framework must be installed and activated.

  1. Switch to the "Remote System Explorer" perspective.
  2. Open the "Test Suites" view via Window -> Show View -> Other ... -> RSE Testing -> Test Suites.
  3. Select your test suite (or all test suites if you want to run them all) and choose "Run" from the context menu.

Progress and results of the single running test cases are presented in the result pane of the view. Copy the content of the result pane and send it to the contact how have asked you to run a specific test suite (or all) within your running Eclipse instance.

Please note that the "Test Suites" view executes the test suites by default in a random Eclipse worker thread. You may enforce the test suite execution to the SWT UI thread by unselecting the green button in the view toolbar. However this will not have any effect either way for test suites or test cases how require to run in worker threads to succeed. As these test suites or test cases can (and should) flag the desire to run in worker threads and the test framework can (and will) asure that this desire is fulfilled on runtime, the green button may not show an noticable effect.

If you are using this way to launch the test cases for RSE development, you must carefully indentify the output part belonging to the failed test case and copy the failure stack trace from there to you RSE development environments Java Stack Trace Console. As you loose any comfort of easy navigation and result comparisation this way, for RSE developers it is gently advised to follow section 2.1.

Writing DSDP-TM JUnit tests

Where to put a new test suite or test case?

  • If you write test suites and test cases to test RSE components or parts, add the test suites and test cases to the org.eclipse.rse.tests plug-in.
  • If you write test suites and test cases for your own implementation based on RSE and the RSE tests framework, create your own tests plug-in which depends on RSE and RSE tests framework plug-ins.
  • If you want to add a new test case, always check if you can extend an existing test suite before creating a new one.
  • If you have a set of test cases, probably linked to an specific RSE component or part, create a new test suite if there is not already one for the same RSE component or part.
  • If creating a new test suite
    • Follow the package naming scheme of the existing test suites and test cases.
    • Each package must start with the prefix org.eclipse.rse.tests.
    • Place interfaces and implementations designated for use only in specific test case(s) in internal packages.
    • Always use the following template to create your own test suite and change only the <YOUR ...> markers!
  
  <YOUR COPYRIGHT HEADER>
  package <YOUR PACKAGE DECLARATION>;
  import junit.framework.Test;
  import junit.framework.TestSuite;
  import org.eclipse.rse.tests.framework.DelegatingTestSuiteHolder;
  <YOUR TEST SUITE COMMENT HEADER>
  public class <YOUR TEST SUITE NAME> extends DelegatingTestSuiteHolder {

/** * Standard Java application main method. Allows to launch the test * suite from outside as part of nightly runs, headless runs or other.

*

Note: Use only <code>junit.textui.TestRunner</code> here as * it is explicitly supposed to output the test output to the shell the * test suite has been launched from. * <p> * @param args The standard Java application command line parameters passed in. */ public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } /** * Combine all test into a suite and returns the test suite instance. * <p> * Note: This method must be always called <code>suite</code> ! Otherwise * the JUnit plug-in test launcher will fail to detect this class! * <p> * @return The test suite instance. */ public static Test suite() { TestSuite suite = new TestSuite("<YOUR TEST SUITE HUMAN READABLE NAME>"); //$NON-NLS-1$ // add the single test suites to the overall one here. suite.addTestSuite(<YOUR TEST CASE IMPLEMENTATION CLASS NAME>.class); return suite; } /* (non-Javadoc) * @see org.eclipse.rse.tests.framework.AbstractTestSuiteHolder#getTestSuite() */ public TestSuite getTestSuite() { return (TestSuite)RSEConnectionTestSuite.suite(); } } </code>

Which base class should a test case inherit from?

RSECoreTestCase features in detail

Test Properties Management

Views and Perspective Management

Test Data Location Management

Test Failure Log Collection Management

Waiting for Results (RSEWaitAndDispatchUtil)

RSEBaseConnectionTestCase features in detail

The Connection Manager

==== The Default Local System Connection ====

Back to the top