举一个例子如何使用python unittest
时间: 2023-07-20 08:28:26 浏览: 89
当使用Python编写测试时,unittest是一个非常有用的模块。以下是一个使用unittest测试一个简单函数的示例:
假设我们要测试一个名为`add`的函数,这个函数会接收两个整数并返回它们的和。我们可以编写一个名为`test_add`的测试用例,确保我们的函数按预期工作。
```python
import unittest
def add(x, y):
return x + y
class TestAdd(unittest.TestCase):
def test_add(self):
self.assertEqual(add(1, 2), 3)
self.assertEqual(add(0, 0), 0)
self.assertEqual(add(-1, 1), 0)
if __name__ == '__main__':
unittest.main()
```
在这个例子中,我们首先导入了unittest模块。然后,我们定义了一个名为`add`的函数,并编写了一个名为`TestAdd`的测试用例类。
在`TestAdd`类中,我们定义了一个名为`test_add`的测试方法。在这个测试方法中,我们使用`assertEqual`方法来断言我们的`add`函数按预期工作。我们对add函数的三个调用分别测试了它的不同输入和输出。
最后,我们使用`unittest.main()`方法运行测试用例。这将运行我们的`TestAdd`类中的所有测试方法,并输出测试结果。
相关问题
python unittest setupclass
在Python的unittest模块中,`setUpClass`是一个特殊的方法,用于在类级别(class level)上初始化所有测试方法之前执行一次性的初始化工作。这个方法只会在整个类的所有测试方法执行前被调用一次,而不是每个测试方法单独调用。`setUpClass`通常用来创建共享资源,比如数据库连接、文件系统结构或者网络连接,因为这些在所有测试之间都需要保持一致的状态。
这是一个例子:
```python
import unittest
class TestMyClass(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.db = connect_to_database() # 创建一个类级别的数据库连接
# 或者其他需要在整个测试类生命周期内存在的初始化操作
def test_example(self):
# 现在可以直接使用 self.db,因为setUpClass已经设置了它
result = execute_query(self.db, "SELECT * FROM table")
self.assertEqual(result, expected_result)
def test_another_example(self):
# 同样可以在这里访问db
@classmethod
def tearDownClass(cls):
close_connection(cls.db) # 类结束时清理资源
if __name__ == '__main__':
unittest.main()
```
在这个例子中,`setUpClass`保证了每次测试开始时都有一个活跃的数据库连接,而`tearDownClass`则负责在所有测试结束后关闭这个连接。
请提供一个python unittest.mock 的MagicMock 检测类方法是否被执行的例子
在Python中,unittest.mock模块的MagicMock对象可以用来模拟类的行为,包括检查方法是否被调用。下面是一个例子,展示了如何创建一个MagicMock对象,并设置它的一个类方法`my_class_method`,然后测试这个方法是否被调用:
```python
from unittest.mock import MagicMock
class MyClass:
def __init__(self):
self.my_instance_method = lambda: None
self.my_class_method = staticmethod(lambda: 'This is a class method')
# 创建一个MyClass的实例,并将my_class_method替换为MagicMock
mocked_my_class = MyClass()
mocked_my_class.my_class_method = MagicMock()
# 现在我们尝试调用my_class_method
mocked_my_class.my_class_method()
# 使用assert_called_once_with检查my_class_method是否只被调用了一次
assert mocked_my_class.my_class_method.called
assert mocked_my_class.my_class_method.call_count == 1
# 如果你想确认没有其他额外的调用,可以这么检查
assert not mocked_my_class.my_class_method.call_args_list[0][0] # 验证没有传入额外参数
阅读全文