【问题标题】:Spring MVC Unit Test issue with powermock dependecy具有 powermock 依赖关系的 Spring MVC 单元测试问题
【发布时间】:2016-05-02 07:31:56
【问题描述】:

您好,我有以下代码要测试:

 @RequestMapping(value = "/displayPages", method = RequestMethod.GET)
    public ModelAndView errorPage(ModelMap model, HttpServletRequest request) {
        String token = (request != null) ? request.getParameter("tok") : "";
        boolean requestP = ESAPI.validator().isValidInput("Request Param", tok, "HTTPParameterValue", 1, false);
        if (requestP || token.contains(msg.getMessage("techErr.tok", new Object[]{}, Constants.LOCAL))) {
            return new ModelAndView("dispError");
        } else {
            return new ModelAndView("login");
        }

    }

请在下面找到我的单元测试:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Matchers;
import static org.mockito.Mockito.when;
import org.owasp.esapi.ESAPI;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;



@RunWith(PowerMockRunner.class)
@PrepareForTest({ESAPI.class})
public class StaticClass {

      private MockMvc mockMvc;

    @Test
    public void testErrorPage() throws Exception {
        System.out.println("initialize");
        PowerMockito.mockStatic(ESAPI.class);
        when(ESAPI.validator().isValidInput(Matchers.anyString(), Matchers.anyString(), Matchers.anyString(),  Matchers.anyInt(), Matchers.anyBoolean())).thenReturn(true);

         mockMvc.perform(get("/displayPages"))
                .andExpect(view().name("dispError")

                );
    }

}

我正在尝试模拟静态方法方法 ESAPI.validator().isValidInput,这就是我使用 powermock 的原因。

当我执行上述代码时,会显示以下错误:

java.lang.NoClassDefFoundError: org/powermock/tests/utils/RunnerTestSuiteChunker
Caused by: java.lang.ClassNotFoundException: org.powermock.tests.utils.RunnerTestSuiteChunker

请在下面找到我的 maven 依赖项:

    <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12-beta-2</version>
            <scope>test</scope>
        </dependency>



          <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito</artifactId>
            <version>1.6.4</version>
       </dependency>

   <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>1.10.19</version>
          <scope>test</scope>
   </dependency>

  <dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>1.6.5</version>
         <scope>test</scope>
</dependency>



        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.2.5.RELEASE</version>
            <scope>test</scope>
        </dependency> 

知道为什么我得到 org.powermock.tests.utils.RunnerTestSuiteChunker 因为 jar powermock 已经在类路径中了吗?

请注意,当我单独使用 mockito 时,它可以正常工作,但由于是静态方法,我必须添加 powermock。

提前感谢您的任何建议

【问题讨论】:

  • 我看到几个问题:junitversion beta,但 4.12 已经发布。您使用不同版本的 powermock:1.6.41.6.5。请验证您的课程路径中是否有 powermock-core
  • 感谢我已将版本与 1.6.4 对齐并删除了 beta 版本,现在也不例外。再次感谢

标签: maven unit-testing spring-test powermockito


【解决方案1】:

需要导入以下依赖

<dependency>
    <groupId>org.powermock.tests</groupId>
    <artifactId>powermock-tests-utils</artifactId>
    <version>${powermock.version}</version>
    <scope>test</scope>
</dependency>

这对我有用,我遇到了同样的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多