WebApplicationContext不会自动装配

我写这个测试课:

@ContextConfiguration(locations = { "classpath:/test/BeanConfig.xml" })

public class CandidateControllerTest {

@Mock(name = "candidateService")

private CandidateService candidateService;

@InjectMocks

private CandidateMenuController candidateMenuController = new CandidateMenuController();

@Autowired

WebApplicationContext wac;

MockMvc mockMvc;

@Before

public void before() {

mockMvc = MockMvcBuilders.webApplicationContextSetup(wac).build();

}

}

但:

代码执行后,我看到下一个跟踪:

java.lang.IllegalArgumentException: WebApplicationContext is required

at org.springframework.util.Assert.notNull(Assert.java:112)

at org.springframework.test.web.server.setup.InitializedContextMockMvcBuilder.<init>(InitializedContextMockMvcBuilder.java:39)

at org.springframework.test.web.server.setup.MockMvcBuilders.webApplicationContextSetup(MockMvcBuilders.java:73)

at controllers.CandidateControllerTest.before(CandidateControllerTest.java:52)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)

at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)

at org.junit.runners.ParentRunner.run(ParentRunner.java:236)

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)

我该如何解决我的问题?

我更改代码:

@ContextConfiguration(locations = { "classpath:/test/BeanConfig.xml" })

@WebAppConfiguration

public class CandidateControllerTest {

@Mock(name = "candidateService")

private CandidateService candidateService;

@InjectMocks

private CandidateMenuController candidateMenuController = new CandidateMenuController();

@Autowired

WebApplicationContext wac;

MockMvc mockMvc;

@Before

public void before() {

MockitoAnnotations.initMocks(this);

// this.mockMvc =

// MockMvcBuilders.webAppContextSetup(this.wac).dispatchOptions(true).build();

mockMvc = MockMvcBuilders.webApplicationContextSetup(wac).build();

}

...

}

跟踪:

java.lang.IllegalArgumentException: WebApplicationContext is required

at org.springframework.util.Assert.notNull(Assert.java:112)

at org.springframework.test.web.server.setup.InitializedContextMockMvcBuilder.<init>(InitializedContextMockMvcBuilder.java:39)

at org.springframework.test.web.server.setup.MockMvcBuilders.webApplicationContextSetup(MockMvcBuilders.java:73)

at controllers.CandidateControllerTest.before(CandidateControllerTest.java:61)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)

at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)

at org.junit.runners.ParentRunner.run(ParentRunner.java:236)

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)

回答:

除非您将添加到测试类中WebApplicationContextApplicationContext否则不只是一个@WebAppConfiguration

@ContextConfiguration(locations = { "classpath:/test/BeanConfig.xml" })

@RunWith(SpringJUnit4ClassRunner.class)

@WebAppConfiguration

public class CandidateControllerTest { ... }

除了@RunWith注释,您还可以扩展spring便利类之一。

@ContextConfiguration(locations = { "classpath:/test/BeanConfig.xml" })

@WebAppConfiguration

public class CandidateControllerTest extends AbstractJUnit4SpringContextTests { ... }

链接

  1. WebAppConfiguration javadoc
  2. 参考指南

以上是 WebApplicationContext不会自动装配 的全部内容, 来源链接: utcz.com/qa/414870.html

回到顶部