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
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
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 }