[jboss-user] [JBoss AOP] - Re: Using AOP to mock out dependecies for unit-test

nizzy do-not-reply at jboss.com
Fri Mar 6 05:12:01 EST 2009


Hi Stale,

Couldn't get it any smaller, :)

Cut down Session Bean

public class AOPUnitTestManagerBean {
  |     
  |     private IPersistenceHelper helper;
  |     
  |     public AOPUnitTestManagerBean() {
  |         helper = new PersistenceHelper(null);
  |     }
  |     
  |     public void createObject(Object o) {
  |         helper.create(o);
  |     }
  | }

JUnit Test
import org.junit.Before;
  | import org.junit.Test;
  | 
  | public class AOPUnitTestManagerBeanTest {
  | 
  |     private AOPUnitTestManagerBean man;
  | 
  |     @Before
  |     public void setUp() throws Exception {
  |         man = new AOPUnitTestManagerBean();
  |     }
  | 
  |     @Test
  |     public void testCreateObject() {
  |         
  |         String s = new String("Hello");
  |         man.createObject(s);
  |     }
  | }

IPersistenceHelper interface
public interface IPersistenceHelper {
  |    
  |     public void create(Object o);
  | }

MockPersistenceHelper
public class MockPersistenceHelper implements IPersistenceHelper {
  |     
  |     public MockPersistenceHelper(String PERSISTENCE_CONTEXT_NAME) {
  |     }
  | 
  |     public void create(Object o) {
  |         System.out.println("inside MockPersistenceHelper.create()");
  |     }
  | }

PersistenceHelper
public class PersistenceHelper implements IPersistenceHelper {
  |     
  |     public PersistenceHelper(String persistenceContextName) {
  |     }
  |     
  |     public void create(Object o) {
  |         System.out.println("inside PersistenceHelper.create()");
  |         System.out.println("This should have been mocked-out --- did you set -javaagent in jvm args?");
  |     }
  | }

Interceptor
import org.jboss.aop.advice.Interceptor;
  | import org.jboss.aop.joinpoint.Invocation;
  | 
  | public class PersistenceHelperInterceptor implements Interceptor {
  | 
  |     public String getName() {
  |         return "PersistenceHelperInterceptor";
  |     }
  | 
  |     public Object invoke(Invocation invocation) throws Throwable {
  |         System.out.println("Inside PersistenceHelperInterceptor.invoke");
  |        
  |         Object helper = new MockPersistenceHelper(null);
  |         return helper;
  |     }
  | }

jboss-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
  | <aop>
  | 
  | 	<bind pointcut="execution(public $typedef{persistenceHelperTypeDef}->new(java.lang.String))">
  |        <interceptor class="PersistenceHelperInterceptor"/>
  |     </bind>
  | 
  | 	<!-- This causes Stack Overflow Error since both PersistenceHelper 
  | 		 and MockPersistenceHelper implement IPersistenceHelper, causing
  | 		 infinite loop (of sorts) -->
  |     <typedef name="persistenceHelperTypeDef" expr="class($instanceof{IPersistenceHelper})" />
  |         
  |     <!-- This causes ClassCastException -->     		
  |     <!-- typedef name="persistenceHelperTypeDef" expr="class($instanceof{IPersistenceHelper}) AND !class(MockPersistenceHelper)" /-->
  |              		
  | </aop>

Hope this helps

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4215632#4215632

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4215632



More information about the jboss-user mailing list