java - 如何使用带有 Hibernate-OMR PanacheRepository 的 Quarkus 模拟 PanacheQuery<Entity>

标签 java hibernate mocking quarkus quarkus-panache

我将 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/

相关文章:

hibernate - 出现错误无法在 Mule Studio 中加载 JDBC 驱动程序类 [oracle.jdbc.OracleDriver]

java - Spring boot + JPA + Hibernate + Oracle 在应用程序启动期间不会自动创建表,并且日志中没有报告错误

java - 如何将列名称添加到结果集中。我将 Java 与 EntityManager 一起使用

java - java中时间戳字符串转时间戳

java - 如何使用其枚举名称获取枚举 ID

Java 构造函数模型

c# - Visual Studio 2012 Fakes - 如何验证调用的方法?

Meteor 的测试实践

java - 黑莓应用程序显示空白屏幕

java - isInstance 和 instanceof - 为什么没有通用方法?