春季批测试

时间:2019-02-14 14:44:32

标签: spring-batch

阅读一些有关测试Spring Batch的博客,并进行相应的测试(请参见下文)。测试完成。但是,我有两个问题:

  1. 我如何确定对工作状态的断言还为时过早?作业异步启动。断言开始时可能还没有准备好。
  2. 工作完成后,我想做一些断言。但是,客户端(即测试)和服务器在两个不同的线程中运行。如果我正确理解它,那么我将不得不通过JdbcTemplate进行查询或在服务器上实现查询的可能性,例如通过休息(然后将是生产性代码)。那是对的吗?还有其他可能性吗?

测试代码:

@SpringBootTest
@RunWith(SpringRunner.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class FooJobTest {

  @Inject
  private Job fooBatchJob;

  @Inject
  private JobLauncher jobLauncher;

  private JobLauncherTestUtils jobLauncherTestUtils;

  @Before
  public void setUp() {
    jobLauncherTestUtils = new JobLauncherTestUtils();
    jobLauncherTestUtils.setJob(fooBatchJob);
    jobLauncherTestUtils.setJobLauncher(jobLauncher);
  }

  @Test
  public void testFooJob() {
    final JobExecution jobExecution = jobLauncherTestUtils.launchJob();

    assertThat(jobExecution.getStatus()).isEqualTo(BatchStatus.COMPLETED);

    // would like to query the database
  }
}

1 个答案:

答案 0 :(得分:1)

要回答您的问题:

  1. 如何确定对工作状态的断言还为时过早?-JobLauncher使用您配置的TaskExecutor,默认情况下是同步的。话虽如此,如果您使用任何异步TaskExecutor实现,则必须轮询结果(或添加JobExecutionListener来警告它已完成)。
  2. 工作完成后,如何查询数据库进行断言?-我将只使用JdbcTemplate来查询和验证您的数据。恕我直言,将REST API添加到服务器应用程序中仅用于测试可能不是一个好主意。
相关问题