All Downloads are FREE. Search and download functionalities are using the official Maven repository.

patterntesting.exception.AbstractTestExceptionAspect.aj Maven / Gradle / Ivy

/**
 * $Id: AbstractTestExceptionAspect.aj,v 1.1 2011/12/22 17:35:49 oboehm Exp $
 *
 * Copyright (c) 2009 by Oliver Boehm
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * (c)reated 08.03.2009 by oliver ([email protected])
 */

package patterntesting.exception;

import org.slf4j.Logger;
import org.aspectj.lang.annotation.SuppressAjWarnings;

import patterntesting.runtime.util.Assertions;

/**
 * This aspect controls if an checked exception is thrown for methods which
 * have it in their throws statement. You can control via the
 * ExceptionFactory and ExceptionFactoryMBean (i.e. by JMX) if an exception
 * is thrown or not. This is helpful for testing purposes if you want to see
 * how your (web) application reacts on a thrown exception.
 * 
* Asserts must be enabled otherwise no additional exceptions will be thrown. * This is for security reason. In production mode assertions are normally * disabled - only for testing assertions are enabled (normally). *
* You can control the thrown exceptions via the ExceptionFactory which is * registered as MBean. You will see the ExceptionFactory not before the first * method marked as @TestException has finished (because it is realized as * after advice). So you can't hit the first @TestException method with the * JConsole because you don't see the ExceptionFactory. If you want to see it * before call ExceptionFactory.getInstance() (with the creation of * the instance it is also registered as MBean). * * @see ExceptionFactory * @see ExceptionFactoryMBean * * @author oliver * @since 0.9 */ public abstract aspect AbstractTestExceptionAspect { private static final ExceptionFactory exceptionFactory = ExceptionFactory .getInstance(); /** * To get the aspect specific logger. * @return the logger */ public abstract Logger getLog(); /** * Specify which methods (or constructors) can throw an checked exception * and should be controlled via ExceptionFactory. *
* Ex: execution(@TestException * *..*.*(..) throws Exception+) */ public abstract pointcut applicationCode(); /** * If asserts are enabled this aspect will throw this exception which is * valid for the weaved method. This is useful for testing if you want to * see how your application reacts on this. */ @SuppressWarnings("unchecked") @SuppressAjWarnings({"adviceDidNotMatch"}) after() returning : applicationCode() && !within(TestExceptionAspect) { if (!Assertions.enabled) { return; } if (getLog().isTraceEnabled()) { getLog().trace("will throw exception for " + thisJoinPoint); } exceptionFactory.provokeFor(thisJoinPoint); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy