Модульный тест с пружиной 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. Но если вы создаете экземпляр самостоятельно, он не работает

Другие вопросы по тегам