当前位置: 首页 > 知识库问答 >
问题:

Quarkus·派头·莫克托失败了

宋高谊
2023-03-14

我努力嘲笑一个华丽的存储库。以下是实体:

    import javax.persistence.*;
    
    @Entity
    public class Thing {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id", nullable = false)
        private Long id;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    }

简单存储库:

import io.quarkus.hibernate.orm.panache.PanacheRepository;

import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class ThingRepository implements PanacheRepository<Thing> {
}

这是资源:

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.List;

@Path("/things")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ThingResource {

    @Inject
    ThingRepository thingRepository;

    @GET
    public List<Thing> list() {
        return thingRepository.listAll();
    }

}

和一个简单的测试,我尝试模拟存储库:

import io.quarkus.test.junit.QuarkusTest;
import io.quarkus.test.junit.mockito.InjectMock;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertNotNull;

@QuarkusTest
class ThingResourceTest {

    private Thing thing;

    @Inject ThingResource thingResource;
    @InjectMock ThingRepository thingRepository;

    @BeforeEach
    void setUp() {
        Thing thing = new Thing();
        thing.setId(1L);
    }

    @Test
    void getAll() {
        List<Thing> things = new ArrayList<Thing>();
        things.add(thing);
        Mockito.when(thingRepository.listAll()).thenReturn(things);
        List<Thing> response = thingResource.list();
        assertNotNull(response);
        assertNotNull(response.get(0));
    }
}

测试失败,因为响应列表是

调试器告诉我存储库实际上是被嘲笑的。但是由于某种原因,Mockito.when().然后返回()没有返回我设置的列表。

我错过了什么?谢谢你的任何帮助。


共有1个答案

凌翔宇
2023-03-14

我把<code>东西</code>双重声明。一次作为类变量,另一次在<code>setUp()

 类似资料:
  • 我对Mockito和带有“间谍”注释的字段有点混乱。 我想测试这个类: 因此,我创建了一个测试类,如下所示: 当Mockito实例categoryServiceImpl将categoryRepository作为模拟类注入时,但它不知道如何创建boundMapper。这个类依赖于mapper,所以我重写了代码: 但是现在的问题是在Mockito注入映射器之前执行了边界映射器的创建,所以我得到了一个N

  • 现在,发生的事情似乎是,当field为0时,Mockito在第1行捕获对参数的引用。然后,在下一行中,该字段将增加到1,并一直保持到第3行,在第3行中进行验证。因此,Mockito错误地认为有两次调用,而第一次调用显然是 我如何指示Mockito正确地识别这种情况?

  • 我通过https://code.Quarkus.io引导了一个普通的Quarkus应用程序,生成的代码没有在我的Mac上成功构建docker映像。 执行时 顺便说一句:使用GraalVM的本机映像已成功生成 有什么想法吗?

  • 我对莫基托有疑问。我想测试这个简单的类: 我写了这个简单的测试: 此测试运行时没有错误。我等待它没有编译,因为没有任何对userService方法的调用…

  • 我遵循这本quarkus指南:https://quarkus.io/guides/gett-start,在我的本地机器上一切都运行良好。然而,当我推送代码并启动jenkins构建时,我得到了以下错误: 与失败的新方法相反: 我怀疑错误来自新的BOM。配置如下: 我已经在本地机器上安装了Maven3.5.3,并且可以成功地构建项目。所以我不知道是什么原因导致了这次失败...

  • Mockito似乎是一个非常好的Java存根/模拟框架。唯一的问题是我找不到任何关于使用API的最佳方法的具体文档。测试中使用的常用方法包括: 当您在实践中看到Mockito的示例时,您会看到如下代码: 从我读过的所有文档中,我已经识别了几个Mockito“语法”的“模式”,这些“语法”是通过将这些方法调用像上面的示例一样链接在一起而获得的。我发现的一些常见模式有: 当/然后:当(你的方法())。