View Javadoc

1   package himock;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import junit.framework.Assert;
7   
8   import himock.core.ClassMockObjectMaker;
9   import himock.core.InterfaceMockObjectMaker;
10  import himock.core.MockBehavior;
11  import himock.core.exception.MockClassNeedCglibException;
12  /*
13   * Created on 2004-7-28
14   */
15  
16  /***
17   * mockedType + mocker --HiMock-> mockObject
18   * 
19   * @author Chen Peng ,chen56@msn.com
20   */
21  public class HiMock  { 
22      private List mockBehaviors= new ArrayList();
23      
24      public HiMock() {}
25      
26      public Object mock(Class mockedType, Object mocker) {
27  		checkParameter(mockedType, mocker);
28      	
29  		MockBehavior m = new MockBehavior(mockedType,mocker);
30  		mockBehaviors.add(m);
31          if(mockedType.isInterface()){
32  			return new InterfaceMockObjectMaker(m).mock();
33          }
34          
35          checkCanIUseCglibMockClass();
36          
37   		return new ClassMockObjectMaker(m).mock();
38      }
39      private void checkParameter(Class mockedType, Object mocker) {
40          if(mockedType==null)
41  			throw new NullPointerException("mockedType不能为null");
42  		if(mocker==null)
43  			throw new NullPointerException("mocker不能为null");
44      }
45      private void checkCanIUseCglibMockClass() {
46  		try{ 
47  		    Class.forName("net.sf.cglib.proxy.Enhancer");    
48  		}catch(ClassNotFoundException e){
49  		    throw new MockClassNeedCglibException("mock Class要用到cglib,而你没有,所以现在只能利用java的动态代理mock Interface,请在http://cglib.sourceforge.net/下载",e);
50  		}
51  	}
52      
53      public void verify(){
54          //Design by Contract ?
55          Assert.assertTrue("No mocks found",mockBehaviors.size()>0);
56          
57          for(int i=0;i<mockBehaviors.size();i++)
58  		    ((MockBehavior)mockBehaviors.get(i)).verify();
59      }
60  
61  }