使用 Spring JPA 进行单元测试 - @Autowired 不工作
Unit Test with Spring JPA - @Autowired is not working
我有一个单元测试和一个助手class。
不幸的是,Helper class' 自动装配不起作用。
它在 MyTest class.
中运行良好
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath*:context.xml"})
@Component
public class MyTest {
@Autowired
private Something something1;
@Autowired
private Something something2;
..
@Test
public void test1()
{
// something1 and something2 are fine
new Helper().initDB();
..
}
}
// Same package
public class Helper {
@Autowired
private Something something1;
@Autowired
private Something something2;
..
public void initDB()
{
// something1 and something2 are null. I have tried various annotations.
}
}
我想避免使用 setter,因为我有 10 个这样的对象,不同的测试有不同的对象。
那么让@Autowired 在 Helper class 中工作需要什么?谢谢!
你的助手 class 没有被 spring 实例化......你必须添加一个像 @component 这样的注释(如果你正在使用包扫描),或者你可以定义 class 作为 spring 配置 class 中的 Bean。但是如果你自己创建实例,是不行的
您不能通过 new
语句创建 Helper
class,但您必须让 spring 创建它才能成为 spring因此它的 @Autowired
字段被注入。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath*:context.xml"})
@Component
public class MyTest {
@Autowired
private Something something1;
@Autowired
private Something something2;
..
@Autowired
private Helper helper
@Test
public void test1() {
helper.initDB();
}
}
//this class must been found by springs component scann
@Service
public class Helper {
@Autowired
private Something something1;
@Autowired
private Something something2;
public void initDB(){...}
}
我有一个单元测试和一个助手class。 不幸的是,Helper class' 自动装配不起作用。 它在 MyTest class.
中运行良好 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath*:context.xml"})
@Component
public class MyTest {
@Autowired
private Something something1;
@Autowired
private Something something2;
..
@Test
public void test1()
{
// something1 and something2 are fine
new Helper().initDB();
..
}
}
// Same package
public class Helper {
@Autowired
private Something something1;
@Autowired
private Something something2;
..
public void initDB()
{
// something1 and something2 are null. I have tried various annotations.
}
}
我想避免使用 setter,因为我有 10 个这样的对象,不同的测试有不同的对象。 那么让@Autowired 在 Helper class 中工作需要什么?谢谢!
你的助手 class 没有被 spring 实例化......你必须添加一个像 @component 这样的注释(如果你正在使用包扫描),或者你可以定义 class 作为 spring 配置 class 中的 Bean。但是如果你自己创建实例,是不行的
您不能通过 new
语句创建 Helper
class,但您必须让 spring 创建它才能成为 spring因此它的 @Autowired
字段被注入。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath*:context.xml"})
@Component
public class MyTest {
@Autowired
private Something something1;
@Autowired
private Something something2;
..
@Autowired
private Helper helper
@Test
public void test1() {
helper.initDB();
}
}
//this class must been found by springs component scann
@Service
public class Helper {
@Autowired
private Something something1;
@Autowired
private Something something2;
public void initDB(){...}
}