模拟和伪造是隔离代码或组件的方法,以确保单元测试仅针对可测试的代码单元运行,而不实际使用应用程序的其他组件或依赖项。 Mocking与伪造的不同之处在于可以检查模拟以断言测试结果。
我徒劳地尝试模拟顶级(不属于任何部分)配置值(.NET Core 的 IConfiguration)。例如,这些都不起作用(使用 NSubstitute,但它是相同的......
在 Sveltekit + Playwright 中模拟后端第 3 方调用
这是一个关于在 SvelteKit+Playwright 中开发端到端测试时的设计模式/最佳实践的相当高级的问题: 确保任何后端代码的推荐方法是什么...
有时,当我编写单元测试时,我应该模拟对超类的引用。 我读过这个问题: 问题 这个答案回答了重构代码的 DI 建议。但我不能 这个答案...
如果没有正式定义的期望,有没有办法告诉 phpunit 模拟对象永远不要期望方法调用?
如何创建一个模拟的 mongo db 对象来使用 python 测试我的软件? 我尝试了 https://pytest-mock-resources.readthedocs.io/en/latest/mongo.html 但出现错误。 首先,我尝试了下面的代码: 定义
以下代码 https://i.stack.imgur.com/vs7vp.png 在我使用 Jest 时有效,但在 Vitest 中不起作用。 我知道 Vitest 在这种情况下的运作方式有所不同,但我还没有...
我正在使用 paramiko 编写一些函数,以在远程主机上执行命令并创建文件。我想为它们编写一些单元测试,但我不知道最简单的方法是什么
运行react(vitest)单元测试用例时出现错误。我知道这是由于本地图像路径造成的
错误: 标准错误|未知测试 错误:错误:连接 ECONNREFUSED ::1:3000 在 Object.dispatchError (E
我试图用笑话和javascript来模拟redis,当我访问redis.mock.instance[0]时它总是空的
我试图用笑话和javascript来模拟redis,当我访问redis.mock.instance[0]时它总是空的 RedisWrapper.js: ` const Redis = require('ioredis'); 常量 REDIS_USER_TTL = 604800; c...
mock.patch 在 with 语句的范围之外泄漏模拟对象
我在文件夹controller/下有以下三个python文件 数学.py 数学课: def __init__(自身, a, b): self.a = a self.b = b def 加法(自身): 返回 self.a + s...
Django Test 模拟 ImageField 阻止测试后上传或清理
我正在为我的项目开发一个测试用例,涉及一些图像和文件字段。有些对象加载了固定装置,有些对象是在测试期间创建的。我用
我正在嘲笑一个用于读取 k8s 秘密以获取秘密令牌的函数。但运行unittest会产生错误: 属性错误: 我正在嘲笑一个用于读取 k8s 秘密以获取秘密令牌的函数。但是运行unittest会产生错误: AttributeError: init.py'> 确实 没有属性“read_namespaced_secret()” 我已经经历了How do you mock Python Kubernetes client CoreV1Api,但它也对我的情况没有帮助。谁能指出我在这里做错了什么? 我的脚本 - read_sec.py import base64 from kubernetes import client, config from logger import logger class kubernetesServices(): def __init__(self): pass def get_secret_vault_token(self): try: config.load_kube_config() api_instance = client.CoreV1Api() sec = api_instance.read_namespaced_secret("random-sec", "random-ns").data token = base64.b64decode(sec['token']).decode("utf-8") return token except Exception as e: logger.error("got error at get_secret_vault_token: {}".format(str(e))) 单元测试 - test_read_sec.py import unittest from unittest.mock import patch from read_sec import * class MockKubernetes(): def __init__(self): pass def mocker_read_namespaced_secret(*args, **kwargs): class MockReadns(): def __init__(self, json_data): self.json_data = json_data def json(self): return self.json_data return MockReadns({"data":{"token":"abc123"}}) class TestkubernetesServices(unittest.TestCase): @patch("kubernetes.client",side_effect=MockKubernetes) @patch("kubernetes.config",side_effect=MockKubernetes) @patch("kubernetes.client.read_namespaced_secret()",side_effect=mocker_read_namespaced_secret) def test_get_secret_vault_token(self,mock_client,mock_config,mock_read): k8s = kubernetesServices() token = k8s.get_secret_vault_token() 您需要嘲笑 kubernetes.client.CoreV1Api 而不是 kubernetes.client。这是一个例子: import base64 import unittest from unittest.mock import patch, Mock import requests from kubernetes import client, config class kubernetesServices(): def get_secret_vault_token(self): config.load_kube_config() api_instance = client.CoreV1Api() sec = api_instance.read_namespaced_secret('random-sec', 'random-ns').data token = base64.b64decode(sec['token']).decode('utf-8') return token class TestkubernetesServices(unittest.TestCase): @patch( 'kubernetes.client.CoreV1Api', return_value=Mock(read_namespaced_secret=Mock(return_value=Mock(data={'token': b'YWJjMTIz'}))) ) @patch('kubernetes.config.load_kube_config', return_value=Mock()) def test_get_secret_vault_token(self, mock_client, mock_config): k8s = kubernetesServices() token = k8s.get_secret_vault_token() self.assertEqual(token, 'abc123') 结果: --------------------------------------------------------------------- Ran 1 tests in 0.071s PASSED (successes=1) JFYI:当您需要多个结果时,更适合使用side_effect。示例: class TestRequest(unittest.TestCase): def test_side_effect(self): with patch('requests.get', side_effect=[1, 2, 3]): print(requests.get('url1')) # 1 print(requests.get('url2')) # 2 print(requests.get('url3')) # 3
我正在使用 Gin 框架编写 REST API。但我在测试我的控制器以及研究 TDD 和 Mock 时遇到了麻烦。我尝试将 TDD 和 Mock 应用于我的代码,但我做不到。 我创建了一个非常
我有一个带有 vite 的测试设置,并且有一个依赖项的依赖项,需要一些模拟选项才能正常运行,我目前将它放在 __mocks__/nestedDependency.js 文件中。 也在我的...
NestJS e2e 测试:用 Jest 模拟 Prisma 客户端(fastify)
在进行 e2e 测试时,您可能想要模拟对 prisma 的调用,但是使用 NestJS 模块来找到正确执行此操作的方法可能会很复杂 对于在这里寻找合适例子的人......
Spring webflux + Flyway clean 禁用问题
我想使用 testcontainers 和 webflux 执行一些单元测试 因此,我创建了一个扩展来在每次启动测试时清理我的 postgres 数据库。 类 ClearDatabaseExtension :
如果实现已订阅它,如何测试 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,但您可以尝试使用此代码来实现它。 希望这有帮助!祝你有美好的一天! :) :) :)
我的文件结构是这样的: pytests/ ├── 模块A/ │ ├── 功能/ │ │ └── process_moduleA.py │ └── test_process_moduleA.py └── 实用程序/ └── 存档.py 在 process_moduleA 中,我有...
测试初始化方法中模拟 HttpContext.Current
我正在尝试向我构建的 ASP.NET MVC 应用程序添加单元测试。在我的单元测试中,我使用以下代码: [测试方法] 公共无效IndexAction_Should_Return_View(){ 变量控制...
我有一个函数 extractPayloadDates ,它接受对话流代理的实例并从中获取和解析数据。我只想模拟 Agent 的单个方法 getParameter,因为没有更多的方法...