Python的标准库框架用于测试。
我正在尝试使用 python 单元测试框架进行处理 csv 文件的单元测试。 我想测试列名称匹配、列中的值匹配等情况。 我知道还有更多
我有课 X类: def __init__(self, db): self.db = db def get_data_from_friend(self): 返回无 def get_data_from_db(self): 返回 self.db.get_my_db_data() def get_...
我使用VSCode中集成的Python unittest进行测试。我有这样的目录 项目根目录/ 源代码/ 模块/ __init__.py a.py 测试/ 模块/ __init__.py 测试_a...
Visual Studio Code 使用 Python、PYTHONPATH 以及单独的源和测试文件夹
给定项目结构: * 项目 * 源代码 * 我的包 * __init__.py * 代码文件.py * 测试 * __init__.py * 我的包 * __init__.py * 代码文件测试.py 嗬...
来自该示例的文档 导入单元测试 类 WidgetTestCase(unittest.TestCase): def 设置(自身): self.widget = Widget('小部件') def 拆解(自我): 自我.w...
我正在编写一些单元测试,我想在 pycharm 中调试它们。调试工作正常。但是,如果我想在调试模式之外运行测试,我会得到: C:\Users\my_name\Miniconda3 nvs eature-
如何模拟Queue.__next__魔术方法?下面带有 side_effect 的代码不起作用: 从unittest.mock导入MagicMock 类队列: def __init__(自身): self.nums = [1, 2, 3] ...
我目前正在做 python 课的作业,需要一些帮助。我写了以下函数: def get_funcs(funcs: dict, file_name: str, table_name: str) -> None: ''' 阅读...
Python/unitest:是否可以多次调用同一个函数并且在失败时测试不中断?
我正在使用Python单元测试库测试一个模块。我想使用不同的参数调用 unt 测试方法,但希望每个调用都是一个单独的测试用例: 导入单元测试 班级
mock.patch 在 with 语句的范围之外泄漏模拟对象
我在文件夹controller/下有以下三个python文件 数学.py 数学课: def __init__(自身, a, b): self.a = a self.b = b def 加法(自身): 返回 self.a + s...
我正在嘲笑一个用于读取 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
为什么unittest的`mock.patch.start`会重新运行启动补丁程序的函数?
假设我们有两个文件: to_patch.py 从unittest.mock导入补丁 def patch_a_function(): print("正在打补丁!") patcher = patch("to_be_patched.function") 修补程序。
我有这个功能: # Spark 已经在某处定义为: Spark = SparkSession.builder.appName("App").getOrCreate() def read_data(spark): 查询=“从表中选择*”
在 vscode 中调试 Python 单元测试的行为与正常测试执行不同
操作系统是Windows 10 Python:3.10(3.11 和 3.9 中的行为相同) 这在 10 天前运行良好,所以我怀疑是软件更新造成的。 我正在尝试在
如何使用 setUp 方法设置 Django 用户以在 Selenium 测试用例中使用?
我正在努力为我的代码创建 Selenium 单元测试。我有一个简单的登录表单: 我正在努力为我的代码创建 Selenium 单元测试。我有一个简单的登录表单: <form method="POST"> <input type="hidden" name="csrfmiddlewaretoken" value="f00b4r"> <div id="div_id_username" class="form-group"> <label for="id_username" class="requiredField">Callsign <spanclass="asteriskField">*</span> </label> <div> <input type="text" name="username" autofocus="" maxlength="150" class="textinput textInput form-control" required="" id="id_username"> </div> </div> <div id="div_id_password" class="form-group"> <label for="id_password" class="requiredField">Password <span class="asteriskField">*</span> </label> <div> <input type="password" name="password" autocomplete="current-password" class="textinput textInput form-control" required="" id="id_password"> </div> </div> <button class="btn btn-primary" type="submit">Login</button> </form> 这是测试用例: class TestLoginFormFirefox(LiveServerTestCase): def setUp(self): self.driver = webdriver.Firefox() self.good_user = User.objects.create_user(username="unittest", password="this_is_unit") def tearDown(self): self.driver.close() def test_index_login_success(self): """ When a user successfully logs in, a link to their profile should appear in the navbar """ self.driver.get('http://127.0.0.1:8000/login') username_field = self.driver.find_element(by=By.ID, value='id_username') password_field = self.driver.find_element(by=By.ID, value='id_password') username_field.send_keys('unittest') password_field.send_keys("this_is_unit") login_button = self.driver.find_element(by=By.CLASS_NAME, value="btn-primary") login_button.send_keys(Keys.RETURN) # needs time to render sleep(3) id_profile_link = self.driver.find_element(by=By.ID, value='id_profile_link').text assert id_profile_link == 'unittest' 测试很简单:如果unittest setUp方法中指定的用户能够成功登录,则断言该用户的用户名是下一页中链接的一部分。 这里的问题是setUp方法创建了用户对象,但是登录失败。这种情况一直持续到我通过 createsuperuser 在项目数据库中创建了一个具有相同用户名和密码的用户。有没有办法为此流程创建一个有效的测试用户,而不必事先使用 createsuperuser 将其添加到项目的 auth_user 表中? 当您使用 Django 的测试框架运行测试时(例如使用 LiveServerTestCase),django 会在测试期间设置一个单独的测试数据库。 该测试数据库独立于您项目的主数据库。 测试类中的 setUp 方法在此测试数据库中正确创建用户,但是如果您的 Selenium 测试针对您的主应用程序(正在使用项目的主数据库)运行,则它将无权访问创建的用户在测试数据库中。这就是为什么您的登录尝试会失败,直到您在主数据库中手动创建用户为止。 几个选项: 使用 Django 的测试服务器:测试方法中的 URL self.driver.get('http://127.0.0.1:8000/login') 应指向测试服务器,该服务器通常在不同的端口上运行。 Django 的 LiveServerTestCase 提供了 live_server_url 属性,它为您提供测试服务器的 URL。 self.driver.get(self.live_server_url + '/login') 在您的测试设置中创建一个用户并使用它
我正在尝试在 VS Code 中调试失败的测试方法,但是当我使用测试侧边栏或测试方法的上下文菜单中的“调试测试”操作时,它失败并出现以下错误(发现...
unittest.TestCase.assertEqual 的参数顺序
是assertEqual(actual,expected)还是assertEqual(expected,actual)? 一方面,我看到很多代码使用assertEqual(实际,预期)。这包括单元测试文档中的示例和
我有一个小的python3脚本。像这样的东西 导入系统 内容 = sys.stdin.read() 打印(内容) 我需要使用 import unittest 为此编写一个单元测试。我试图理解,如何
我问如何使用 Python 3 在单元测试中模拟类属性。我尝试了以下方法,这对我遵循文档有意义,但它不起作用: foo.py: 类 Foo(): @正确的...
如何在unittest下运行的doctest中抑制ResourceWarning()s
我的Python文档测试打开了一些它永远不会关闭的文件。这不会造成任何问题;当对象被销毁时它们会自动关闭,并添加逻辑以确保它们明确关闭将