Сборка Maven завершается неудачно даже после успешного выполнения модульного теста - PullRequest
0 голосов
/ 29 сентября 2019

Я работаю над образцом, чтобы продемонстрировать модульное тестирование с помощью пружинной партии.Во время сборки maven я мог видеть, что модульный тест выполнен успешно, но сборка все еще не выполняется с ошибкой ниже.

Пакетный тест успешно выполнен.Ниже приведен вывод

2019-09-29 16:30:43.276  INFO 8065 --- [           main] o.s.b.a.b.JobLauncherCommandLineRunner   : Running default command line with: []
2019-09-29 16:30:43.402  INFO 8065 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=transactionProcessingJob]] launched with the following parameters: [{}]
2019-09-29 16:30:43.434  INFO 8065 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Executing step: [transactionImportStep]
Hibernate: call next value for transaction_entry_seq
Hibernate: call next value for transaction_entry_seq
Hibernate: insert into transaction_entry (account_no, amount, transaction_date, transaction_type, id) values (?, ?, ?, ?, ?)
Hibernate: insert into transaction_entry (account_no, amount, transaction_date, transaction_type, id) values (?, ?, ?, ?, ?)
Hibernate: insert into transaction_entry (account_no, amount, transaction_date, transaction_type, id) values (?, ?, ?, ?, ?)
Hibernate: insert into transaction_entry (account_no, amount, transaction_date, transaction_type, id) values (?, ?, ?, ?, ?)
Hibernate: insert into transaction_entry (account_no, amount, transaction_date, transaction_type, id) values (?, ?, ?, ?, ?)
Hibernate: insert into transaction_entry (account_no, amount, transaction_date, transaction_type, id) values (?, ?, ?, ?, ?)
Hibernate: insert into transaction_entry (account_no, amount, transaction_date, transaction_type, id) values (?, ?, ?, ?, ?)
Hibernate: insert into transaction_entry (account_no, amount, transaction_date, transaction_type, id) values (?, ?, ?, ?, ?)
Hibernate: insert into transaction_entry (account_no, amount, transaction_date, transaction_type, id) values (?, ?, ?, ?, ?)
2019-09-29 16:30:43.696  INFO 8065 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [SimpleJob: [name=transactionProcessingJob]] completed with the following parameters: [{}] and the following status: [COMPLETED]

После выполнения текстового блока сборка завершается с ошибкой ниже

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.batch.test.JobLauncherTestUtils' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1658) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1217) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1171) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]         ... 31 common frames omitted

Полный исходный код примера доступен здесь

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Если вы используете Spring Batch v4.1 +, вы можете добавить аннотацию @SpringBatchTest в ваш тестовый класс, и он автоматически добавит компонент JobLauncherTestUtils в ваш тестовый контекст:

@RunWith(SpringRunner.class)
@SpringBatchTest
@ContextConfiguration(classes = {JobConfiguration.class})
public class JobTest {

  @Autowired
  private JobLauncherTestUtils jobLauncherTestUtils;

  // use jobLauncherTestUtils in test methods

}

Пожалуйстапроверьте Что нового раздел для полного примера.Более подробную информацию вы найдете в разделе unit testing .

0 голосов
/ 29 сентября 2019

К сожалению, ваш тест не выполнен.Он не запускается из-за сбоя контекста приложения при запуске.Для исправления теста необходимо добавить пропущенную зависимость (JobLauncherTestUtils).Для этого я бы предложил добавить контекст теста:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {TransactionBatchApplication.class, TransactionBatchTests.TestConfig.class})
//@Transactional
@TestPropertySource(properties = {"spring.batch.job.enabled=false"})
public class TransactionBatchTests {

    @Autowired
    private JobLauncherTestUtils jobLauncherTestUtils;

    @Autowired
    private TransactionEntryRepository transactionEntryRepository;

    @Test
    public void testJob() throws Exception {
        JobExecution jobExecution = jobLauncherTestUtils.launchJob();
        assertThat("COMPLETED").isEqualTo(jobExecution.getExitStatus().getExitCode());
        assertThat(transactionEntryRepository.count()).isEqualTo(18);
    }

    @Configuration
    static class TestConfig {
        @Bean
        JobLauncherTestUtils jobLauncherTestUtils() {
            return new JobLauncherTestUtils();
        }
    }
}

Также я отключил @Transactional из-за:

java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client).

И я бы рекомендовал изменить значения в утверждении, (фактическое и ожидаемое):

assertThat(transactionEntryRepository.count()).isEqualTo(10);

После этого проверьте, является ли 10 допустимым ожидаемым значением, поскольку фактическим является 18, не уверенный, какое из них является правильным.

Таким образом, изменив ожидаемое значение на 18, вы получите зеленый цвет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...