/******************************************************************************* | |
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved. | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* Contributors: | |
* Oracle - initial API and implementation from Oracle TopLink | |
******************************************************************************/ | |
package org.eclipse.persistence.testing.framework; | |
import java.lang.reflect.*; | |
/** | |
* <b>Purpose:</b> Allow for very simple Unit tests. | |
* | |
* The drawback with the current test framework is that because each test case | |
* corresponds 1-1 to a java class, in the worst case there will be one java | |
* class for each test case. | |
* <p> | |
* This can be alleviated by writing generic test cases, (i.e. that take many | |
* parameters), or in the worst case testing many things with a single test | |
* case / java class. The latter is messy and the former works well with | |
* functional tests (where you can execute the same code but in different | |
* ways), but is fairly useless when it comes to Unit testing. How for example | |
* can one write a generic test case for testing getters and setters? | |
* <p> | |
* A unit test can be added to any TestSuite, and works well when setup/reset is | |
* extremely simple or not required, and the test method itself is only a couple | |
* of lines long. In this case the entire test itself is just a method in | |
* that TestSuite, named _test{TestName}. | |
* <p> | |
* <b>Example:</b> To add a test called CreateTest, to test Expression.create(), | |
* define a method called _testCreateTest in ExpressionUnitTestSuite, | |
* and in addTests call: | |
* addTest(new UnitTestCase("CreateTest")); | |
* When the test is executed ExpressionUnitTestSuite setup() and reset() | |
* will be called, along with _testCreateTest(). | |
* | |
* @since 9.0.4 | |
* @author Stephen McRitchie | |
*/ | |
public class UnitTestCase extends AutoVerifyTestCase { | |
public UnitTestCase(String name) { | |
setName(name); | |
} | |
public void reset() { | |
((TestSuite)getContainer()).reset(); | |
} | |
public void setup() { | |
((TestSuite)getContainer()).setup(); | |
} | |
public void test() { | |
String methodName = "_test" + getName(); | |
try { | |
Class[] args = { }; | |
java.lang.reflect.Method method = getContainer().getClass().getMethod(methodName, args); | |
Object[] objectList = { }; | |
method.invoke(getContainer(), objectList); | |
} catch (NoSuchMethodException nsme) { | |
throw new TestProblemException("Unit test could not be found", nsme); | |
} catch (IllegalAccessException iae) { | |
throw new TestProblemException("Unit test could not be found", iae); | |
} catch (InvocationTargetException ite) { | |
if (ite.getTargetException() instanceof TestException) { | |
throw (TestException)ite.getTargetException(); | |
} else { | |
throw new TestErrorException("Unit test failed due to exception.", ite.getTargetException()); | |
} | |
} | |
} | |
/** | |
* Unit tests are so simple that they only require a test method. | |
*/ | |
public void verify() { | |
// Do nothing. | |
} | |
} |