【发布时间】: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.4和1.6.5。请验证您的课程路径中是否有powermock-core。 -
感谢我已将版本与 1.6.4 对齐并删除了 beta 版本,现在也不例外。再次感谢
标签: maven unit-testing spring-test powermockito