在老的项目中使用的是Spring3.2,最近我使用了Spring4.0.6进行迁移测试,之前使用的mock的测试没有问题,但是在Spring4中报错如下:

java.lang.NoSuchMethodError: org.springframework.core.CollectionFactory.createLinkedMapIfPossible(I)Ljava/util/Map;
	at org.springframework.mock.web.MockHttpServletRequest.(MockHttpServletRequest.java:107)
	at org.springframework.mock.web.MockHttpServletRequest.(MockHttpServletRequest.java:187)
	at com.baidu.solr.finance.IncrementalContorllerTest.init(IncrementalContorllerTest.java:28)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.junit.internal.runners.MethodRoadie.runBefores(MethodRoadie.java:129)
	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:93)
	at org.unitils.UnitilsJUnit4TestCla***unner$TestListenerInvokingMethodRoadie.runBeforesThenTestThenAfters(UnitilsJUnit4TestCla***unner.java:186)
	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84)
	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
	at org.unitils.UnitilsJUnit4TestCla***unner.invokeTestMethod(UnitilsJUnit4TestCla***unner.java:95)
	at org.junit.internal.runners.JUnit4Cla***unner.runMethods(JUnit4Cla***unner.java:61)
	at org.unitils.UnitilsJUnit4TestCla***unner.access$000(UnitilsJUnit4TestCla***unner.java:42)
	at org.unitils.UnitilsJUnit4TestCla***unner$1.run(UnitilsJUnit4TestCla***unner.java:60)
	at org.junit.internal.runners.Cla***oadie.runUnprotected(Cla***oadie.java:34)
	at org.junit.internal.runners.Cla***oadie.runProtected(Cla***oadie.java:44)
	at org.unitils.UnitilsJUnit4TestCla***unner.run(UnitilsJUnit4TestCla***unner.java:67)
	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)


我查看了一下代码和pom.xml的依赖关系,之前Spring3的依赖如下:


        3.2.4.RELEASE
        4.10
    
...
        
            org.springframework
            spring-mock
            2.0.8
            test
        
        
            org.springframework
            spring-test
            ${spring.version}
            test
        

到了Spring4,就需要把spring-mock依赖去除。

希望可以帮助到诸位!