【问题标题】:Delegate method doesn't work at Jmockit Unit Test委托方法在 Jmockit 单元测试中不起作用
【发布时间】:2014-04-10 11:03:30
【问题描述】:

我只想从 HttPServletRequest 中设置属性。这是 Jmockit 的代码 sn-p。

    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; never work with the delegated method。

这是提示的错误信息:

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)

这是怎么回事???

【问题讨论】:

    标签: unit-testing junit jmockit


    【解决方案1】:

    发现问题:

        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方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2022-07-02
      相关资源
      最近更新 更多