测试时如何在控制器中自动装入Spring bean?

我有一个春季测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:my-context.xml")
    public class MyTest {
        @Test
        public void testname() throws Exception {
           System.out.println(myController.toString());
        }

        @Autowired
        private MyController myController;
    }

当myController被定义在与MyTest相同的类中时,这工作正常,但是如果我将MyController移动到另一个类,它不是自动装配的,因为下面的运行返回null,所以myController似乎不能自动装配:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:my-context.xml")
        public class MyTest {
            @Test
            public void testname() throws Exception {
               System.out.println(new TestClass().toString());
            }

        }

    @Controller
    public class TestClass {
            @Autowired
            private MyController myController;

            public String toString(){
              return myController.toString();       
            }
    }

自动装配只发生在正在运行测试的课程内吗? 如何在由测试类实例化的所有类上启用自动装配?

更新:

感谢smajlo&Philipp Sander的回答,我能够使用此代码修复此问题以访问此Bean,而不是显式创建Bean。 这已经由Spring配置,所以我可以从上下文访问它:

ApplicationContext ctx = new ClassPathXmlApplicationContext("my-context.xml");  
TestClass myBean = (TestClass) ctx.getBean("testClass");  

当显式创建bean时,它不会被Spring自动装配。


new TestClass().toString()

如果通过手动调用构造函数创建对象obejct不受Spring控制,则字段不会自动装配。

编辑:

也许你想创建特定的测试环境并加载测试类......因为现在我想你的测试方式有点不对。 为什么你需要从测试类访问另一个测试类? 这不是单元测试了:)

无论您将添加什么注释,您的TestClass都不会自动装配,因为您正在创建新实例。试试这个:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:my-context.xml")
    public class MyTest {
    @Autowired
    private TestClass testClass;
        @Test
        public void testname() throws Exception {
           System.out.println(testClass.toString());
        }

    }

@Controller
public class TestClass {
        @Autowired
        private MyController myController;

        public String toString(){
          return myController.toString();       
        }
}

正如Sotirios Delimanolis所说:

MyTestClass需要由Spring进行管理以获得自动布线。 做到这一点,仅仅在@Component到MyTestClass并自动装载它

链接地址: http://www.djcxy.com/p/67727.html

上一篇: How to autowire a Spring bean within a controller when testing?

下一篇: Spring MVC Test In Fitnesse