gpt4 book ai didi

java - 测试时如何在 Controller 内 Autowiring Spring bean?

转载 作者:行者123 更新时间:2023-12-01 13:49:35 27 4
gpt4 key购买 nike

我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com