Как написать Integration Test для класса @Component, у которого есть код репозитория Spring? - PullRequest
0 голосов
/ 17 февраля 2019

Я пишу тестовые примеры Junit для следующего класса @Component. На самом деле я использую Sql Server для своего исходного приложения. Но, как часть тестирования, я использую в памяти h2 db. И я хочу протестировать этот класс беззапуск исходного приложения. Если я использую репозиторий в тестовом классе, я вижу данные, возвращаемые в тестовом режиме, но именно тогда, когда я вызываю метод void внутри класса @Component, получая указатель NULL.Вот мой код.

    @Component
    public class CandidatesTableServiceImpl {



        @Autowired
        private CandidatesTableRepository candidatesTableRepository;

        @Transactional
        public void getAllRecordsFromCandidateTable() throws ParseException {

            List<CandidatesTable> customerRecord = candidatesTableRepository
                    .findByStatus(status);

/** This method throwing Null pointer exception when calling from method **/


    }

мой src / test / reources / application.properties

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
# Create DDL
spring.jpa.hibernate.ddl-auto=create

И мой класс Test выглядит следующим образом

@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
@Transactional
public class CandidateTableTest {

    @Autowired
    TestEntityManager entityManager;

    @Autowired
    CandidatesTableRepository candidatesTableRepository;

    String status;

    @Before
    public void init() {
        CandidatesTableServiceImpl candidatesTableServiceImpl= new candidatesTableServiceImpl()

    }

    @Test
    public void checkSaveMethod() throws ParseException {

        CandidatesTable candidatesTable = new CandidatesTable();

        candidatesTable.setStatus(status);
        candidatesTable.setCandidatesTableID(1);
        candidatesTable.setAccountNumber("2000321654");

        candidatesTableRepository.save(candidatesTable);
        this.entityManager.persist(candidatesTable);


/** This method works fine **/
                  List<CandidatesTable> alertRecord = candidatesTableRepository.findByStatus(status);


/** This method throwing NUll Pointer excption **/
        candidatesTableServiceImpl.getAllRecordsFromCandidateTable();

    }

}

1 Ответ

0 голосов
/ 17 февраля 2019

вы не указали, где сканировать компоненты, используйте

@ComponentScan(value = ["your.package.name"])

, также вам нужно сбросить данные

   @Test
   public void checkSaveMethod() throws ParseException {

       CandidatesTable candidatesTable = new CandidatesTable();

       candidatesTable.setStatus(status);
       candidatesTable.setCandidatesTableID(1);
       candidatesTable.setAccountNumber("2000321654");

       candidatesTableRepository.save(candidatesTable);
       this.entityManager.persist(candidatesTable);
       this.entityManager.flush();

/** This method works fine **/
                 List<CandidatesTable> alertRecord = candidatesTableRepository.findByStatus(status);


/** This method throwing NUll Pointer excption **/
       candidatesTableServiceImpl.getAllRecordsFromCandidateTable();

   }

...