Это может быть полезно!
Проблема здесь: Department found = depRepo.findByNDeptId(1);
Вы ожидаете, что данные будут возвращены вместо нуля.
По умолчанию тесты, помеченные @DataJpaTest
, будут использовать встроенную базу данных в памяти (заменяя любой явный или обычно автоматически настраиваемый источник данных).
Итак, исходя из того, что вы указали в своем вопросе:
- Проверьте, есть ли у вас ожидаемые тестовые данные. Вам необходимо иметь эту запись с ID = 1 в вашей базе данных в памяти или в используемой вами БД.
- Если у вас нет необходимости сначала подготовить некоторые тестовые данные (например, в своем классе теста добавьте метод @BeforeClass, где вы можете вставить некоторые тестовые данные перед запуском теста)
- Может быть, когда вы создаете свои тестовые данные с помощью entityManager (эта строка
entityManager.merge(dep);
), он сохраняет их в другой БД? Не тот, который вы читаете после? В любом случае, лучше создать тест, прежде чем запускать его.
1020 * Е.Г. *
@BeforeClass
public static void init() {
// you could try instead of this to use your Repository to create test data
Department dep = new Department();
dep.setnDeptId(1);
// entityManager.merge(dep);
yourRepo.save(dep);
}
Обновление:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "department_seq_generator")
@SequenceGenerator(name = "department_seq_generator", sequenceName = "department_seq")
@Column(name = "ndept_id")
public Integer nDeptId;
Согласно этому коду в вашей базе данных есть последовательность, которая отвечает за создание идентификаторов для новых записей.
В основном, как это работает: когда вы сохраняете новую запись, вызывается что-то вроде sequence get me next id
, и вы получаете ID.
Вот почему, даже если вы установите что-то для идентификатора (, что не следует делать ), вы получите совершенно другое число!
Итак, вот как вы можете изменить свой тест:
@Test
public void TestFindById() {
Department dep = new Department();
// you can set some fields here but not ID
// this is saved entity, it means it has an ID assigned by the database
Department saveInDB = em.merge(dep);
// that is what you need
final Integer newRecordID = getFromDB.getnDeptId();
// test your repository or what you need
Department getFromDB = depRepo.findByNDeptId(newRecordID);
// all asserts that you need
assertThat(getFromDB).isEqualTo(saveInDB);
}