| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
| |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> |
| <title>JUnit Integration Tutorial</title> |
| </head> |
| |
| <body> |
| <h1>JUnit Integration Tutorial</h1> |
| <p> |
| The Code Coverage Tool provides an additional JUnit launch configuration delegate as a means to integrate with the |
| JUnit test framework. This allows for determining the achieved code coverage for test suites containing containing |
| test cases for Operational QVT (QVTO) model transformations. This section explains how to measure and visualize the code coverage of |
| a test suite. Basic knowledge about EMF, QVTO, JUnit is assumed. |
| </p> |
| |
| <p> |
| <i><b>Note:</b></i> The example created by following the tutorial is available <a href="../example/qvto-coverage-example.zip">here</a>. |
| </p> |
| |
| <h2>Steps</h2> |
| <ol> |
| <li> Create a QVTO transformation, e.g. from <a href="http://www.levysiqueira.com.br/2011/01/eclipse-qvto-hello-world/">this</a> tutorial. </li> |
| <li> Create a Plug-in project. </li> |
| <li> Add a JUnit test case to the project </li> |
| <li> Add and implement a test case. An example code snippet is listed below: </li> |
| </ol> |
| |
| <textarea rows="56" cols="143" style="background-color: buttonface;"> |
| public class SingleTest { |
| |
| private static final URI TRANSFORMATION_FILE_URI = |
| URI.createFileURI("C:/Localdata/Eclipse/qvto-coverage/runtime-ws/org.eclipse.qvto.example/transforms/HelloWorld.qvto"); |
| private static final URI IN_MODEL_PLATFORM_URI = |
| URI.createURI("platform:/resource/org.eclipse.qvto.example.mm.test/instances/in.abc"); |
| private static final URI OUT_MODEL_PLATFORM_URI = |
| URI.createURI("platform:/resource/org.eclipse.qvto.example.mm.test/instances/out.abc"); |
| |
| @BeforeClass |
| static public void setUp() throws Exception { |
| // Add project to platform resource URI map |
| EcorePlugin.getPlatformResourceMap().put("org.eclipse.qvto.example.mm.test", URI.createFileURI(System.getProperty("user.dir") + '/')); |
| |
| // Register resource factory for our ABC meta-model |
| Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("abc", |
| new XMIResourceFactoryImpl()); |
| // Register package |
| AbcPackage.eINSTANCE.eClass(); |
| } |
| |
| @Test |
| public void test() { |
| // create the input extent with its initial contents |
| ResourceSet resourceSet = new ResourceSetImpl(); |
| Resource inResource = resourceSet.getResource(IN_MODEL_PLATFORM_URI, true); |
| EList<EObject> inObjects = inResource.getContents(); |
| ModelExtent input = new BasicModelExtent(inObjects); |
| |
| // create an empty output model extent |
| ModelExtent output = new BasicModelExtent(); |
| |
| // setup the execution environment details -> |
| // configuration properties, logger, monitor object etc. |
| ExecutionContextImpl context = new ExecutionContextImpl(); |
| |
| // run the transformation assigned to the executor |
| TransformationExecutor executor = new TransformationExecutor(TRANSFORMATION_FILE_URI); |
| ExecutionDiagnostic result = executor.execute(context, input, output); |
| |
| // In case of success, store the output objects in it's resource and persist the resource |
| if(result.getSeverity() == Diagnostic.OK) { |
| List<EObject> outObjects = output.getContents(); |
| ResourceSet resourceSet2 = new ResourceSetImpl(); |
| Resource outResource = resourceSet2.createResource(OUT_MODEL_PLATFORM_URI); |
| outResource.getContents().addAll(outObjects); |
| try { |
| outResource.save(Collections.emptyMap()); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| } else { |
| // Consider the test failed |
| fail("Failed to execute the transformation"); |
| } |
| } |
| } |
| </textarea> |
| |
| <ol start="5"> |
| <li> Run the JUnit test (Run As -> JUnit Test)</li> |
| <li> A dialog will be presented, asking to chose between the available JUnit launch delegate. This includes |
| the one contributed by the Code Coverage Tool, which is the Operational QVT Interpreter Coverage Launcher. Either use |
| configuration specific settings or change the workspace global setting to prefer the Operational QVT Interpreter Coverage |
| Launcher. The former method allows ruling out the Operational QVT Interpreter Coverage Launcher in case a JUnit test suite does |
| not include any QVT model transformations. </li> |
| </ol> |
| |
| <p> |
| <img alt="Select Preferred Launcher Dialog" src="../images/select-launch-delegate-dialog.png"> |
| </p> |
| |
| <ol start="7"> |
| <li> Press OK to confirm your choice. The test case will now be executed. </li> |
| <li> Upon successful execution of the test case, the Operational QVT Code Coverage View is instantiated and given focus, in order |
| to directly present the coverage data.</li> |
| </ol> |
| |
| <p> |
| <img alt="QVTo Test Coverage View" src="../images/qvto-test-coverage-view.png"> |
| </p> |
| |
| </body> |
| </html> |