2014-04-10 57 views
0

我只想從HttPServletRequest中設置屬性。以下是Jmockit的代碼片段。委託方法不適用於Jmockit單元測試

new Expectations() { 
     private final Delegate requestAttributeDelegate = new Delegate() { 

      final Map<String, Object> attributes = new HashMap<String, Object>(); 

      Object getAttribute(String key) { 
       return attributes.get(key); 
      } 

      void setAttribute(String key, Object value) { 
       attributes.put(key, value); 
      } 
     }; { 
     req.getParameter(ParameterConstant.ACTION); result = ActionConstant.REMOVE; 
     req.getParameter(ParameterConstant.EMAIL); result = myEMail; 
     req.getRequestDispatcher(PageConstant.USER_REMOVE_GROUP_FORM); result = dispatcher; 
     req.setAttribute(ConfigurationConstant.GROUPS, groups); result = requestAttributeDelegate; 
     dispatcher.forward(req, resp); times = 1; 
    }}; 

該行的結果:req.setAttribute(ConfigurationConstant.GROUPS, groups); result = requestAttributeDelegate;從不與委託方法一起使用。

這是錯誤信息提示:

java.lang.IllegalArgumentException: More than one non-private invocation handler method found 
    at com.company.cisco.actionitems.test.UserTest$16.<init>(UserTest.java:371) 
    at com.company.cisco.actionitems.test.UserTest.Test013_ActionRemove_DoGet_Case01(UserTest.java:355) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

什麼這個是錯的???

回答

0

發現了問題:

new Expectations() { 
     private final Delegate requestSetAttributeDelegate = new Delegate() { 

      final Map<String, Object> attributes = new HashMap<String, Object>(); 

      void setAttribute(String key, Object value) { 
       attributes.put(key, value); 
      } 
     }; { 
     req.getParameter(ParameterConstant.ACTION); result = ActionConstant.REMOVE; 
     req.getParameter(ParameterConstant.EMAIL); result = myEMail; 
     req.setAttribute(ConfigurationConstant.GROUPS, groups); result = requestSetAttributeDelegate; 
     req.getRequestDispatcher(PageConstant.USER_REMOVE_GROUP_FORM); result = dispatcher; 
     dispatcher.forward(req, resp); times = 1; 
    }}; 

1)首先,序列的setAttribute被錯誤插入。它必須在req.getRequestDispatcher行之上。
2)委託方法必須刪除getAttribute方法。