测试时如何在控制器中自动装入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?