mocking 相关问题

模拟和伪造是隔离代码或组件的方法,以确保单元测试仅针对可测试的代码单元运行,而不实际使用应用程序的其他组件或依赖项。 Mocking与伪造的不同之处在于可以检查模拟以断言测试结果。

如果实现已订阅它,如何测试 Observables 抛出错误(使用 throwError)?

假设我有一个带有以下 HTML 的 Angular 组件(摘录): 假设我有一个带有此 HTML 的 Angular 组件(摘录): <some-thirdparty-component (onClickCallback)="handleChange($event)" 我有一个函数可以处理这个问题。它将其转发到 service.saveSomething (返回一个 Observable)。够简单的。作为一个包装组件,我需要 subscribe,因为我显然想让它执行。 public handleChange(event: any) { this.assignmentService.saveSomething(event) .pipe(takeUntil(this.ngUnsubscribe)) // additional error handling may be piped here .subscribe(); } 假设我想测试一下。特别是,我想测试错误情况,即当它(又名保存或其他)失败时: let dataMock = {}; it('should throw error', waitForAsync(() => { const error = new Error('test error'); spyOn(service, 'saveSomething').and.returnValue(throwError(error)); expect(() => { component.handleChange(dataMock); }).toThrow(); expect(service.saveSomething).toHaveBeenCalledOnceWith(dataMock); expect(toastService.showToast).toHaveBeenCalledOnceWith(/** **/); // an additional error handling in the pipe to test in a different implementation })); 问题是测试失败,在此版本中显示“预期函数会抛出异常。”。 当我将其更改为不希望抛出错误时: component.handleChange(dataMock); 然后 jasmine 实际上抛出了一个错误,这使得测试失败: 错误:main.js 中测试错误 我已经将它包裹在waitForAsync中,这在这种情况下通常很有用。 我的猜测是,问题是由于 Observables 的工作方式,抛出异常以异步方式发生。 Observable 错误被转换为 JS Error 并被抛出。然而,我无法通过 jasmine toThrow 捕捉到这个,因为它发生在最后,即通过 waitForAsync 并且只在那里捕捉到。但现在断言已经太晚了。 此外,我无法公开 Observable(这是通常的方式),因为有人需要以高效的代码进行订阅。只是出于测试原因而暴露它,对我来说似乎也不干净。 有点像先有鸡还是先有蛋的问题... 那么遇到这种情况该怎么办? 如果我理解您关于可观察量问题的问题,我个人会做类似的事情,关于调用可观察量并在您的代码库中订阅它们以及错误抛出/处理逻辑。 public handleChange(event: any) { this.assignmentService.saveSomething(event) .pipe(takeUntil(this.ngUnsubscribe)) .subscribe({ next: (value: any) => { console.log(value, 'success!!!'); }, error: (err: any) => { console.error('error detected, printing out the output error msg:', err); } }); } 希望我正确理解你的问题,上面的代码是处理可观察值和订阅输出的错误的好方法。如果您的问题与如何处理 jasmin 错误有关,我个人没有使用过 jasmin,但您可以尝试使用此代码来实现它。 希望这有帮助!祝你有美好的一天! :) :) :)

回答 1 投票 0

如何模拟我正在测试的函数内部调用的函数?

我的文件结构是这样的: pytests/ ├── 模块A/ │ ├── 功能/ │ │ └── process_moduleA.py │ └── test_process_moduleA.py └── 实用程序/ └── 存档.py 在 process_moduleA 中,我有...

回答 1 投票 0

测试初始化方法中模拟 HttpContext.Current

我正在尝试向我构建的 ASP.NET MVC 应用程序添加单元测试。在我的单元测试中,我使用以下代码: [测试方法] 公共无效IndexAction_Should_Return_View(){ 变量控制...

回答 5 投票 0

在 NodeJS 中使用 Jest 对类进行部分模拟

我有一个函数 extractPayloadDates ,它接受对话流代理的实例并从中获取和解析数据。我只想模拟 Agent 的单个方法 getParameter,因为没有更多的方法...

回答 1 投票 0

如何在单元测试期间通过 EF 用户定义的函数映射来模拟 EF.Functions.ILike

我更改了当前代码 _context.TABLE.Where(x => x.COLUMN1.Contains("xxx") || x.COLUMN2.Contains("xxx")) 进入 _context.TABLE.Where(x => EF.Functions.ILike(x.COLUMN1,...

回答 1 投票 0

pytest 和 argparse:由于命令行参数导致测试失败

我有 client.py 模块,它使用 argparse 进行 CLI: 类客户端: #一些逻辑 ... def main(参数=无): 解析器 = argparse.ArgumentParser(formatter_class=argparse.

回答 1 投票 0

在 Vitest 中从 React-router-dom 模拟 useParams 返回 {} 而不是实际的模拟

我正在开发一个使用react-router-dom的React项目。出于测试目的,我使用 Vitest 来模拟 useParams 挂钩。然而,在模拟 useParams 并添加控制台日志来检查之后......

回答 1 投票 0

如何使用 gtest 模拟 C++ 中的非虚方法?

是否有一种干净、简单的方法可以使用 gtest 来模拟 C++ 中的非虚拟方法?尽管使用 GoogleMock 方式强制您重新声明您的模拟类。 在我看来,此功能至关重要

回答 1 投票 0

GUnit 和 Mocking 框架

Guidewire 云标准规定,不完全支持模拟(mockito、easymock 等),建议使用测试存根。这是正确的吗?为什么? 我们计划构建一个新的单元测试套件...

回答 1 投票 0

在 laravel 中测试多存储

我在 Laravel 测试环境中尝试模拟多存储时遇到问题。 这是我的代码: 公共功能 sftp ( 兄弟姐妹 $sibling ) { $file_paths = Storage::build($sibling->con...

回答 2 投票 0

如何循环模拟列表?

注意:此问题和答案旨在作为规范。 我正在为一个简单的方法编写单元测试。由于单元测试中只应测试一个类,因此其他所有内容都必须进行模拟。

回答 1 投票 0

使用 Spock Java/Groovy 模拟 BiFunction

尝试模拟返回 BiFunction 的函数失败。 该函数看起来像 公共接口 myInterface { 可选> myAwesomeFunc...

回答 2 投票 0

如何在spock框架中模拟HttpURLConnection及其responseCode

我正在使用Java并使用groovy中的spock框架编写junit,想要模拟HttpUrlConnection并根据不同情况设置connection.getResponseCode() >> 200。 网址 url = 新网址(

回答 1 投票 0

这是从头开始模拟纯 C 函数的有效方法吗?

//fakePow.c #包括 双pow(双b,双p) { 返回6.0; } //main.c #包括 #包括 int 两次(int x) { 如果 (x <= 0) ret...

回答 1 投票 0

Vitest 中模拟 Vue Router 的问题

我正在使用组合 API 学习 Vue 3,而且我对 Vitest 也很陌生(不过我知道它使用 Vue Test Utils)。 所以,简而言之,我遇到了一个问题,我模拟了 Vue 路由器,触发点击...

回答 1 投票 0

C FFF 模拟重新定义

我正在尝试使用 C 的 FFF 模拟库(https://github.com/meekrosoft/fff)对 C 代码进行单元测试。我遇到的问题是 gcc 将我的模拟对象视为原始对象的重新定义

回答 1 投票 0

如何使用@pytest.fixture测试写入文件操作

我正在用 python 练习单元测试,但遇到了一个问题 我有一个包含读/写文件操作的模块 我的项目结构是这样的 。名称_项目: --src -回文分类...

回答 1 投票 0

cypress 拦截中的 API 模拟

我是柏树新手。 问题:当控制台 -> 网络选项卡中出现多个 API 时,我无法拦截 API 模拟的 url 描述:我的需求如下: 逻辑...

回答 1 投票 0

起订量引发事件参数计数不匹配

我有一个界面,其中有一个我想在模拟中触发的事件: 公共接口 IGpsLocationSource { 事件 EventHandler GpsLocationUpdated; } 我的测试看起来像这样: 变种 GPS...

回答 2 投票 0

使用 Mockito 多次调用具有相同参数的同一方法

有没有办法让存根方法在后续调用时返回不同的对象?我想这样做是为了测试来自 ExecutorCompletionService 的不确定响应。即测试

回答 14 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.