Модульный тест с пружиной JPA - @Autowired не работает
У меня есть модульный тест и вспомогательный класс. К сожалению, автопроводка класса Helper не работает. Он отлично работает в классе MyTest.
@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.
}
}
Я бы не хотел использовать сеттеры, потому что у меня около 10 таких объектов, и разные тесты имеют разные. Итак, что требуется для работы @Autowired в классе Helper? Спасибо!
2 ответа
Вы не должны создавать Helper
класс по new
утверждение, но вы должны позволить весне создать его, чтобы стать весной и, следовательно, его @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(){...}
}
Ваш класс Helper не создается экземпляром Spring... Вы должны добавить аннотацию типа @component (если вы используете сканирование пакетов), или вы можете определить класс как Bean в вашем классе Springconfiguration. Но если вы создаете экземпляр самостоятельно, он не работает