Тесты JUnit выполняются отдельно, но не все вместе с использованием базы данных H2 - PullRequest
0 голосов
/ 19 июня 2019

Я выполняю некоторые тесты JUnit, которые выполняются идеально разделенными один за другим, но не проходят, когда все они выполняются вместе. Здесь я покажу вам несколько примеров тестов.

Я пытался закрыть соединение после каждого из тестов и обрезать таблицы после каждого теста, и проблема не исчезла.

@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = DBInstallerApplication.class)
public class ContactDataDeleteTriggerTest {

  @Autowired
  DataSource dataSource;

  /**
   * Tests if the delete trigger works.
   */
  @Test
  @Transactional
  public void testContactDataDeleteTrigger_deleteContactData_entryWasWrittenInHisTable()
      throws SQLException {

     long contactDataId =
        ContactDataInsertTestDataUtil.insertContactDataForTest(dataSource.getConnection());

    String sql = "DELETE FROM CONTACT_DATA WHERE ID = ?";

    JdbcTemplate jdbcTemplateDelete = new JdbcTemplate(dataSource);
    int result = jdbcTemplateDelete.update(sql, new Object[]{contactDataId});
    assertTrue(result > 0, "Expected some result");

    sql = "SELECT * FROM HIS_CONTACT_DATA WHERE ID = ? AND OPERATION = 'DELETE'";

    JdbcTemplate jdbcTemplateSelect = new JdbcTemplate(dataSource);
    List<Object> resultSet =
        jdbcTemplateSelect.query(
            sql,
            new Object[]{contactDataId},
            (rs, rowNum) -> {
              return null;
            });
    assertFalse(resultSet.isEmpty());
    assertTrue(resultSet.size() == 1);

  }
}

Здесь я покажу вам еще один тест:

@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = DBInstallerApplication.class)
public class ContactDataInsertTriggerTest {

  @Autowired
  DataSource dataSource;

  /**
   * Tests if the insert trigger works.
   */
  @Test
  @Transactional
  public void testContactDataInsertTrigger_insertContactData_entryWasWrittenInHisTable()
      throws SQLException {
    long contactDataId =
        ContactDataInsertTestDataUtil.insertContactDataForTest(dataSource.getConnection());

    String sql = "SELECT * FROM HIS_CONTACT_DATA WHERE ID = ? AND OPERATION = 'INSERT'";

    JdbcTemplate jdbcTemplateSelect = new JdbcTemplate(dataSource);
    List<Object> resultSet =
        jdbcTemplateSelect.query(
            sql,
            new Object[]{contactDataId},
            (rs, rowNum) -> {
              return null;
            });
    assertFalse(resultSet.isEmpty());
    assertTrue(resultSet.size() == 1);

  }
}

Проблема в том, что во втором тесте (testContactDataInsertTrigger) ResultSet возвращает пустой список.

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