package org.needle4j.junit; import org.junit.rules.MethodRule; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.Statement; import org.needle4j.configuration.NeedleConfiguration; import org.needle4j.db.DatabaseTestcase; import org.needle4j.db.operation.DBOperation; /** * The {@link DatabaseRule} provides access to the configured Database and * execute optional configured {@link DBOperation} before and after a test. * * <pre> * public class EntityTestcase { * @Rule * public DatabaseRule databaseRule = new DatabaseRule(); * * @Test * public void testPersist() throws Exception { * User user = new User(); * // ... * databaseRule.getEntityMnager().persist(user); * } * } * </pre> * * @see DatabaseTestcase * @see DBOperation * */ public class DatabaseRule extends DatabaseTestcase implements MethodRule { /** * @see org.needle4j.db.DatabaseTestcase#DatabaseTestcase() */ public DatabaseRule() { super(); } /** * @see org.needle4j.db.DatabaseTestcase#DatabaseTestcase(Class...) */ @Deprecated public DatabaseRule(final Class<?>... clazzes) { super(clazzes); } /** * @see org.needle4j.db.DatabaseTestcase#DatabaseTestcase(DBOperation, * Class...) */ @Deprecated public DatabaseRule(final DBOperation dbOperation, final Class<?>... clazzes) { super(dbOperation, clazzes); } /** * @see org.needle4j.db.DatabaseTestcase#DatabaseTestcase(DBOperation) */ public DatabaseRule(final DBOperation dbOperation) { super(dbOperation); } /** * @see org.needle4j.db.DatabaseTestcase#DatabaseTestcase(String, * DBOperation) */ public DatabaseRule(final String persistenceUnitName, final DBOperation dbOperation) { super(persistenceUnitName, dbOperation); } /** * @see org.needle4j.db.DatabaseTestcase#DatabaseTestcase(String) */ public DatabaseRule(final String persistenceUnitName) { super(persistenceUnitName); } DatabaseRule(final NeedleConfiguration configuration) { super(configuration); } @Override public final Statement apply(final Statement base, FrameworkMethod method, Object target) { return new Statement() { @Override public void evaluate() throws Throwable { try { before(); base.evaluate(); } finally { after(); } } }; } }