У меня есть функция createObject () в моем сервисе rest Service:
@Service
public class MyService {
//Repos and contructor
@Transactional
public ObjectDto createObject(Object) {
Mother mother = new Mother(name, age);
Kid kid = new Kid(name, age);
mother.addKid(kid);
this.motherRepo.saveAndFlush(mother);
Long kidId = kid.getId();
doStuffWithKidId();
return new ObjectDto()
.withMother(mother)
.withKid(kid)
.build();
}
}
Моя сущность для мамы / ребенка в основном такая:
@Entity
@Table("mother")
public class mother() {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id)
private Long id;
//other attributes, including @OneToMany for Kid
//Getter/Setter
}
Существует похожая сущностьдля детей.
Как видите, идентификатор устанавливается базой данных.В сущности нет идентификатора для идентификатора.Конструктор также не имеет идентификатора.
Теперь я хочу проверить свой сервис.Я копирую свои репозитории и хочу убедиться, что мой ObjectDto содержит значения, такие как id.
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest
public MyServiceTest {
@Mock
private MotherRepo motherRepo;
@InjectMocks
private MyService myService;
@Test
void createObjectTest() {
ObjectDto expectedObjectDto = setup...;
Object inputObject = setup...;
assertThat.(this.myService.createObject(inputObject))
.isEqualToComparingFieldByField(expectedObjectDto);
}
}
Ожидаемый ObjectDto выглядит примерно так:
{
"motherId":1,
"motherAge":40,
"kidId":1
...
}
Проблема заключается в том, что идентификатор устанавливается базой данных.Поскольку базы данных нет, а в хранилище используется Mockito, это значение всегда равно нулю.Даже если я установил свой ожидаемый объект с нулевым значением в качестве идентификатора, мне нужен идентификатор в "doStuffWithKidId ()" в службе.Я получаю исключение NullPointerException.
Есть ли возможность установить идентификатор, как в ReflectionTestUtils.setField ()?В литературе я читал, что сервис всегда должен быть проверен с использованием макетов.Это правильно, или мне нужна БД в памяти, например, H2?
Спасибо за помощь.