我将 Quarkus 与 Hibernate-ORM PanacheRepository 一起使用,我需要模拟 PanacheQuery。 我有以下类(class):
- 标签(JPA实体)
- LabelRepository(实现 PanacheRepository< Label > {})
在我的测试类中,我需要模拟 labelRepository.find("name", name)。此方法返回 PanacheQuery,但我不知道如何创建新的 PanacheQuery 模拟。
@QuarkusTest
class LabelResourceTest {
@Inject LabelResource labelResource;
@InjectMock LabelRepository labelRepository;
private Label label;
private List<Label> labels;
@BeforeEach
void setUp() {
label = new Label();
label.setId(1L);
label.setName("LABEL#01");
label.setInheritable(true);
labels = new ArrayList<>();
labels.add(label);
}
@Test
void getNameTest() {
when(labelRepository.find("name", "LABEL#01")).thenReturn(......);
.....
}
}
谢谢。
最佳答案
最后一段代码(感谢@loicmathieu):
PanacheQuery query = Mockito.mock(PanacheQuery.class);
Mockito.when(query.page(Mockito.any())).thenReturn(query);
Mockito.when(query.firstResultOptional()).thenReturn(Optional.of(label));
when(labelRepository.find("name", "LABEL#01")).thenReturn(query);
在我的例子中,我使用了 firstResultOptional() 方法,但如果您需要使用 list() 方法,您可以替换它,因为您得到的是整个列表,而不仅仅是一个项目。
关于java - 如何使用带有 Hibernate-OMR PanacheRepository 的 Quarkus 模拟 PanacheQuery<Entity>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64765163/