Java @自动连线不';不能在Spring MVC测试中工作

Java @自动连线不';不能在Spring MVC测试中工作,java,spring,spring-mvc,autowired,spring-test-mvc,Java,Spring,Spring Mvc,Autowired,Spring Test Mvc,我正在使用SpringWebMVC和SpringTest构建一个卡路里计数器应用程序进行测试。 这是我的测试课 @ContextConfiguration({"classpath:spring/spring-app.xml","classpath:spring/mock.xml"}) @RunWith(SpringRunner.class) @WebAppConfiguration @EnableWebMvc public class InMemoryAdminRestController

我正在使用SpringWebMVC和SpringTest构建一个卡路里计数器应用程序进行测试。 这是我的测试课

   @ContextConfiguration({"classpath:spring/spring-app.xml","classpath:spring/mock.xml"})
@RunWith(SpringRunner.class)
@WebAppConfiguration
@EnableWebMvc
public class InMemoryAdminRestControllerSpringTest {

@Autowired
private AdminRestController controller;

@Autowired
private InMemoryUserRepositoryImpl repository;

@Before
public void setUp() throws Exception {
    repository.init();
}

@Test
public void delete() throws Exception {
    controller.delete(UserTestData.USER_ID);
    Collection<User> users = controller.getAll();
    Assert.assertEquals(users.size(), 1);
    Assert.assertEquals(users.iterator().next(), ADMIN);
}

@Test(expected = NotFoundException.class)
public void deleteNotFound() throws Exception {
    controller.delete(10);
}
}

我了解到spring需要WebApplicationContext,但如何将其包含到我的mock.xml中

添加要加载到ContexConfiguration注释的bean类,即:
@ContextConfiguration(class={AdminRestController.class,AnotherBean.class,…)
@krokodilko然后出现这种情况:java.lang.IllegalArgumentException:无法处理上下文配置的位置和类[ContextConfigurationAttributes@4eb7f003declaringClass='ru.javawebinar.topjava.web.InMemoryAdminRestControllerSpringTest',classes='{class ru.javawebinar.topjava.web.user.AdminRestController}',locations='{classpath:spring/spring-app.xml,classpath:spring/mock.xml}',inheritLocations=true,initializers='{}',inheritInitializers=true,name=[null],contextLoaderClass='org.springframework.test.context.ContextLoader']:配置一个或另一个,但不能同时配置两个。
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package="ru.javawebinar.topjava.**.repository.mock"/>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!--
        <bean class="ru.javawebinar.topjava.repository.mock.MockUserRepositoryImpl" id="mockUserRepository"/>

        <bean class="ru.javawebinar.topjava.service.UserServiceImpl">
            <constructor-arg name="repository" ref="mockUserRepository"/>
        </bean>
-->
<import resource="spring-tools.xml"/>

<!-- Not necessary, already included with component-scan -->
<!--<context:annotation-config/>-->

<context:component-scan base-package="ru.javawebinar.**.service"/>
</beans>
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name  'ru.javawebinar.topjava.web.InMemoryAdminRestControllerSpringTest': Unsatisfied dependency expressed through field 'controller'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'ru.javawebinar.topjava.web.user.AdminRestController' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:587)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:373)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1350)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:401)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'ru.javawebinar.topjava.web.user.AdminRestController' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1509)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:584)