Использование @SneakyThrows в JUNIT тестах в Spring

Я сделал такую сущность Brand в Hibernate

@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@Table(name = "brands")
public class Brand {

    @Setter(AccessLevel.NONE)
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    public Brand(String name) {
        this.name = name;
    }
}

Setter для поля id я не хочу делать, т.к. Hibernate сам позаботится о присвоении id при сохранении. Считаю незачем открывать его, чтобы методы из других классов его не изменяли. При этом встает маленькая проблема при unit-тестировании сервисов, где извлекаются эти сущности. Мне приходится через org.springframework.util.ReflectionUtils делать так:

public class BrandServiceTest {

    private BrandService brandService;

    private BrandRepository brandRepository;

    @BeforeEach
    public void init() {
        brandRepository = mock(BrandRepository.class);
        brandService = new BrandServiceImpl(brandRepository);
    }

    @Test
    public void testFindAll() {
        List<Brand> expectedBrands = new ArrayList<>();
        Brand brand = new Brand("Brand1");
        ReflectionUtils.setField(brand.getClass().getField("id"), brand, 1L);
        expectedBrands.add(brand);

        when(brandRepository.findAll())
                .thenReturn(expectedBrands);

        List<BrandDto> resultBrands = brandService.findAll();

        assertNotNull(resultBrands);
        assertEquals(expectedBrands.size(), resultBrands.size());
        assertEqualsBrands(expectedBrands, resultBrands);
    }

Т.е. мне надо через Reflection присвоить некоторое значение полю id. В связи с этим:

Вопрос №1: приветствуется ли в тестах присваивать через Reflection значения полей?

Далее, т.к. вызов

brand.getClass().getField("id")

способен генерировать проверяемое исключение, а я его ловить не хочу, т.к. знаю, что это поле есть и поэтому хочу поставить аннотацию @SneakyThrows над методом testFindAll().

Вопрос №2: хорошо ли ставить такую аннотацию в тестах?


Ответы (0 шт):