作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Spring 测试:
@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 移动到另一个类,它不会 Autowiring ,因为下面运行返回 null,所以 myController 似乎没有正确 Autowiring :
@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();
}
}
Autowiring 是否仅发生在运行测试的类中?如何在测试类实例化的所有类上启用 Autowiring ?
更新:
感谢 smajlo 和 Philipp Sander 的回答,我能够使用此代码访问此 bean 来修复此问题,而不是显式创建 bean。这已经由 Spring 配置,因此我从上下文访问它:
ApplicationContext ctx = new ClassPathXmlApplicationContext("my-context.xml");
TestClass myBean = (TestClass) ctx.getBean("testClass");
当显式创建 bean 时,Spring 不会 Autowiring 它。
最佳答案
new TestClass().toString()
如果您通过手动调用构造函数创建对象,则对象不受 Spring 控制,因此字段不会 Autowiring 。
编辑:
也许您想创建特定的测试上下文并将两者加载到测试类上..因为现在我猜您的测试方法有点错误。为什么需要从测试类访问另一个测试类?这不再是单元测试:)
无论您添加什么注释,您的TestClass
都将永远不会 Autowiring ,因为您创建了新实例。试试这个:
@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();
}
}
关于java - 测试时如何在 Controller 内 Autowiring Spring bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20075068/
我是一名优秀的程序员,十分优秀!