Java 如何在SpringMVC2.5项目中使用MockMvc?
MockMvc在Spring测试3.2中引入。我有一个依赖SpringMVC2.5的老项目,它很难升级(有太多的东西需要解决)。我想用MockMvc做集成测试 代码如下:Java 如何在SpringMVC2.5项目中使用MockMvc?,java,spring,Java,Spring,MockMvc在Spring测试3.2中引入。我有一个依赖SpringMVC2.5的老项目,它很难升级(有太多的东西需要解决)。我想用MockMvc做集成测试 代码如下: import static org.hamcrest.CoreMatchers.containsString; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.spr
import static org.hamcrest.CoreMatchers.containsString;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.io.IOException;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import redis.embedded.RedisServer;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/afdspplicationContext*.xml",
"/applicationContext*.xml"})
@WebAppConfiguration
public class ScheduleControllerTest {
private static RedisServer redisServer;
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@BeforeClass
public static void setUp() throws IOException {
redisServer = new RedisServer(45678);
redisServer.start();
}
@Before
public void setup() throws Exception {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@AfterClass
public static void tearDown() {
redisServer.stop();
}
@Test
public void getRoomStatusByDateAndBuilding() throws Exception {
this.mockMvc.perform(get("/api/v1/recommend/checkin?userName=dd&roomName=f"))
.andExpect(status().isOk())
.andExpect(content().string(containsString("\"code\":422")))
.andExpect(content().string(containsString("test")));
}
}
然而,测试最终出现了错误:
objc[77723]:JavaLaunchHelper类在这两种语言中都实现
/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/bin/Java
(0x10bc614c0)和
/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/jre/lib/libinstrument.dylib
(0x10bcd14e0)。将使用其中一个。哪一个是未定义的
java.lang.IllegalStateException:无法加载
CacheAwareContextLoaderDelegate[类
org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
在
org.springframework.test.context.BootstrapUtils.createCacheAwareContextLoaderDelegate(BootstrapUtils.java:101)
在
org.springframework.test.context.BootstrapUtils.createBootstrapContext(BootstrapUtils.java:70)
在
TestContextManager(TestContextManager.java:105)
在
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:152)
在
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.(SpringJUnit4ClassRunner.java:143)
在sun.reflect.nativeConstructor附件mpl.newInstance0(本机
方法)在
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
在
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:526)
在
org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
在
org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
在
org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
在
org.junit.internal.builders.AllDefaultPossibilityBuilder.runnerForClass(AllDefaultPossibilityBuilder.java:26)
在
org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
在
org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
在
JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49)
在
intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
在
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
在
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
原因:java.lang.NoSuchMethodError:
实例化类(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object;
在
org.springframework.test.context.BootstrapUtils.createCacheAwareContextLoaderDelegate(BootstrapUtils.java:98)
... 还有18个
进程已完成,退出代码为255
可能是因为弹簧MVC 2.5与弹簧测试4.3.9不匹配而出现此错误。是否存在任何解决方法,让我在继续使用Spring MVC 2.5的同时使用MockMvc?Spring 2.5是11年前(2007年11月19日)发布的,并且没有正式支持您尝试使用的Java 7。根据:
- 完全支持Java6和JavaEE5(JDBC4.0、JTA1.1、JavaMail 1.4、JAX-WS2.0)
MockMvc
framework,并降级到Java 6。不要混合使用2.5和3.2依赖项,这将产生很多类路径问题,就像您刚才观察到的那样
我认为11年后升级Spring并不是开发者最糟糕的投资。你不能。千万不要混用框架不同版本的jar,否则会导致问题。将整个框架升级到一个更新的版本(通常是替换版本)。