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

在服务测试中使用真实组件

呼延原
2023-03-14

但我不能让它工作。

测试的服务:

@Service
public class ServiceImpl{
    @Autowired
    private Helper helper;
}

具有自动连线repo的Helper类

@Component
public class Helper {
    @Autowired
    private Repository repo;
}

我的测试应该是这样的

@ExtendWith(MockitoExtension.class)
public class ServiceImplTest {

    ServiceImpl service;

    @Mock
    private Repository repoMock;

    @InjectMocks
    private Helper helper;

}

我想更好的重构整个事情,但不幸的是,这是不可能的...

欢迎帮忙。

共有1个答案

长孙翔
2023-03-14

我更喜欢构造函数注入而不是字段注入。(此处阅读更多内容)

在本例中,类看起来如下所示:

    @Component
    public class Helper {
        @Autowired
        public Helper(Repository repo) {
            this.repo = repo;
        }
    }

    @Service
    public class ServiceImpl{
        @Autowired
        public ServiceImpl(Helper helper) {
            this.helper = helper;
        }
    }

通过这种方式,您可以轻松地使用模拟存储库对象创建真正的帮助器对象:

    ServiceImpl service;

    private Helper helper;

    @Mock
    private Repository repoMock;

    @BeforeEach
    void init() {
        helper = new Helper(repoMock);
        service = new ServiceImpl(helper);
    }
 类似资料:
  • 在我的应用程序中,我有很多REST服务。我已经编写了所有服务的测试: REST服务调用(例如)如下所示: 然后我检查了响应体-一切正常。缺点是,必须启动应用程序才能调用REST服务。 我现在的问题是如何在我的JUnit-@Test方法中做到这一点?它是一个Spring Boot应用程序(带有嵌入式tomcat)。 谢谢帮忙!

  • 像组件一样,服务通常需要依赖,Angular通过服务类的构造函数注入。由于我们在Angular的引导过程之外初始化这些类,我们必须自己显式注入这些依赖。这是通过使用TestBed配置测试模块传回所需的依赖项(如HTTP模块)来实现的。

  • 问题内容: 我正在尝试开始为我的角度应用程序编写单元测试,并且由于无法确定如何以一种可测试的方式模拟服务而非常快地遇到了一个障碍。 有没有一种方法可以模拟REST调用,否则好像我需要在测试中镜像服务中的所有内容,这对我来说似乎不对,但是我对测试写作相当陌生,所以也许应该这样有待完成。任何帮助将不胜感激。 我的服务如下: 到目前为止,我的测试包括: 问题答案: 您可以像这样模拟ngResource发

  • 问题内容: 发出未在Angular 1.x单元/集成测试中模拟的请求会导致错误: 错误:意外的请求:GET / real-request 是否可以使用Karma + Jasmine测试设备发出真正的HTTP请求?有什么好的做法? 问题答案: AngularJS是有思想的框架,它对单元测试中的HTTP请求的看法是所有这些都应该被模拟。 不建议在单元测试中执行真实的HTTP请求,这有两个原因。单元测试

  • 我正在尝试如何在使用Eureka的Spring Boot应用程序上构建集成测试。说我有考试 我的代码路径中有该 api 调用: 这将NPE。发现客户端返回为空。如果我直接启动 Spring 启动应用程序并自己使用 API,代码工作正常。我在任何地方都没有特定的个人资料用法。我需要为发现客户端配置一些特殊的 wrt Eureka 以进行测试吗?